oracle 学习(五)pl/sql语言存储过程&包
首先搞清楚俩概念 存储过程(procedure)&程序包(package)
- 存储过程:数据库对象之一,可以理解为数据库的子程序,在客户端和服务器端可以直接调用它。触发器是与表直接关联的特殊存储过程,是在对表记录进行操作时触发的。
- 优点
- 存储过程在服务器端运行,执行速度快。
- 存储过程执行一次后,代码就驻留在高速缓存,以后的操作只需从高速缓存中调用已编译的代码执行,提高了系统性能。
- 确保数据库的安全。可以不授权用户直接访问应用程序中的一些表,而是授权用户执行访问这些表的存储过程。非授权的用户除非通过存储过程,否则不能访问这些表。
- 自动完成需要预先执行的任务。存储过程可以在系统启动时自动执行,而不必在系统启动后再进行手工操作,大大方便了用户使用,可以自动完成一些需要预先执行的任务。
- 存储过程的创建
CREATE[OR REPLACE]PROCEDURE<过程名> /*定义过程名*/
[(<参数名><参数类型><数据类型>[DEFAULT<默认值>][,...N])]
/*定义参数类型及属性*/
{IS|AS}
[<变量声明>]
BEGIN
<过程体>
END[<过程名>][;]说明:
- 过程名:存储过程名称要符合标识符规则,并且在所属方案中必须是唯一的。关键字OR REPLACE表示在创建过程中,如果已存在同名的存储过程,则重新创建。
- 参数名:
- 存储过程的调用
[{EXEC|EXECUTE}]<过程名>
[([<参数名>=>]<实参>|@<实参变量>[,...n])][;]CREATE PROCEDURE proc
AS
BEGIN
DBMS_OUTPUT.PUT_LINE('hello world');
END; EXEC proc;
;OR
BEGIN
proc;
END; - 包
- 创建包头
CREATE [OR REPLACE] PACKAGE [<用户方案名>.]<包名> /*包头名称*/
IS|AS <PL/SQL 程序序列> /*定义过程、函数等*/ - 创建包体
CREATE [OR REPLACE] PACKAGE BODY[<用户方案名>.]<包名>
IS|AS<PL/SQL 程序序列> - 删除包
/*删除包体*/
DROP PACKAGE BODY <包名>;
/*删除包头及包体*/
DROP PACKAGE <包名>; - 包的创建&调用eg:
/*包头部分*/
CREATE OR REPALCE PACKAGE TEST_PACKAGE
IS
FUNCTION average (cnum IN char)
RETURN NUMBER;
END; /*包体部分*/
CREATE OR REPALCE PACKAGE BODY TEST_PACKAGE
IS
FUNCTION average (cnum IN char)
RETURN NUMBER
AS
avger NUMBER;
BEGIN
SELECT AVG(成绩) INTO avger
FROM CJB WHERE 课程号=cnum GROUP BY 课程号;
RETURN(avger);
END avgerage;
END; /*调用包*/
DECLARE
num number;
BEGIN
num:=TEST_PACKAGE.average('');
DBMS_OUTPUT.PUT_LINE(TO CHAR(num));
END; - 包的初始化:当第一次调用打包子程序时,该包将进行初始化。也就是说将该包从硬盘读入内存,并启动调用的子程序的编译代码。这时系统为该包中定义的所有变量分配内存单元。每个会话都有其打包变量的副本,以确保执行同一包子程序两个会话使用不同的内存单元。大多数情况下,初始化代码要在包第一次初始化时运行。为实现这种功能,可以在包体中的所有对象之后加入一个初始化部分。语法格式为:
CREATE OR REPLACE PACKAGE BODY<包名>
IS|AS
...
BEGIN
<初始化代码>;
END; - 重载:在包的内部,过程和函数可以被重载。名称相同参数不同。
- 限制:
- 如果两个子程序的参数仅在名称和模式上不同,这两个子程序不能重载。
- 不能仅根据两个子程序不同的返回类型对其进行重载。
- 重载子程序的参数的类族(type family)必须不同。例如CHAR 和 VARCHAR2属于同一类族,故不能对他们进行唯一的参数重载。
- 限制:
oracle 学习(五)pl/sql语言存储过程&包的更多相关文章
- 学习笔记:oracle学习三:SQL语言基础之sql语言简介、用户模式
目录 1.sql语言简介 1.1 sql语言特点 1.2 sql语言分类 1.3 sql语言的编写规则 2.用户模式 2.1 模式与模式对象 2.2 实例模式scott 本系列是作为学习笔记,用于记录 ...
- 学习笔记:oracle学习三:SQL语言基础之检索数据:简单查询、筛选查询
目录 1. 检索数据 1.1 简单查询 1.1.1 检索所有列 1.1.2 检索指定的列 1.1.3 查询日期列 1.1.4 带有表达式的select语句 1.1.5 为列指定别名 1.1.6 显示不 ...
- oracle学习之pl/sql使用==转载
PLSQL循序渐进全面学习教程(全):https://blog.csdn.net/spark998/article/details/2065269
- Oracle11g R2学习系列 之九 PL/SQL语言
这是个重头戏,如果精通了PL/SQL,毫不夸张的说明精通了Oracle了.PL/SQL由以下三个部分组成(Definition,Manipulation,Control): DDL:数据定义语言,Cr ...
- Oracle数据库之开发PL/SQL子程序和包
Oracle数据库之开发PL/SQL子程序和包 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保 ...
- Oracle PL/SQL 语言(Procedural Language/SQL)
Oracle PL/SQL 语言(Procedural Language/SQL)是结合了结构化查询与 Oracle 自身过程控制为一体的强大语言,PL/SQL 不但支持更多的数据类型,拥有自身的变量 ...
- Oracle数据库之PL/SQL包
Oracle数据库之PL/SQL包 1. 简介 包(PACKAGE)是一种数据对象,它是一组相关过程.函数.变量.常量和游标等PL/SQL程序设计元素的组合,作为一个完整的单元存储在数据库中,用名称来 ...
- 开发PL/SQL子程序和包及使用PL/SQL编写触发器、在JDBC中应用Oracle
1. 子程序的各个部分: 声明部分.可执行部分.异常处理部分(可选) 2.子程序的分类: A. 过程 - 执行某些操作 a. 创建过程的语法: CREATE [OR REPLACE] PROC ...
- PL/SQL语言的学习笔记
一.PL/SQL简介1.什么是PL/SQL程序?(PL/SQL是对SQL语言的一个扩展,从而形成的一个语言) 2.PL/SQL语言的特点(操作Orcale数据库效率最高的就是PL/SQL语言,而不是C ...
随机推荐
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring事务管理接口PlatformTransactionManager、TransactionDefinition和TransactionStatus
Spring 的事务管理是基于 AOP 实现的,而 AOP 是以方法为单位的.Spring 的事务属性分别为传播行为.隔离级别.只读和超时属性,这些属性提供了事务应用的方法和描述策略. 在 Java ...
- vue的computed和method的区别
(1)computed是响应式的,methods并非响应式. (2)computed是带缓存的 (3)computed中的成员可以只定义一个函数作为只读属性,也可以定义get/set变成可读写属性,这 ...
- T_SQL 获取系统当前时间与明天时间的两种格式
--获取系统明天的时间 select CONVERT(nvarchar(20),dateadd(d,1,getdate()),120) 2017-01-21 15:04:10 sele ...
- ZOJ - 3961 Let's Chat(区间相交)
题意:给定一个长度为n的序列,A和B两人分别给定一些按递增顺序排列的区间,区间个数分别为x和y,问被A和B同时给定的区间中长度为m的子区间个数. 分析: 1.1 ≤ n ≤ 109,而1 ≤x, y ...
- prometheus配置简介
参考网页:https://my.oschina.net/wangyunlong/blog/3060776 global: scrape_interval: 15s evalua ...
- Diligent Engine学习笔记初衷
2020年过去一个月了,回首过去的一年,工作确实很忙,但是自己个人的技术也没得到什么成长,项目当中一些比较难搞的问题也没得到更深入的研究.思来想去,希望新的一年能改变自己的工作方式,将工作上的事物进一 ...
- css笔记01
CSS样式(Cascading Style Sheets) 表格布局缺陷: 嵌套太多,一旦顺序错乱页面达不到预期效果 表格布局页面不灵活,动一块整个布局全都要变 语法: 在style标签中 ...
- 和为S的连续正序列
[问题]小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就 ...
- 修改maven默认仓库(即repository)的路径
原文链接:https://blog.csdn.net/ideality_hunter/article/details/53006188 简要说明:主要操作为新建仓库路径,在maven的conf目录下修 ...
- Emoji表情符号兼容方案
Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号:词义来自日语(えもじ,e-moji,moji在日语中的含义是字符) 表情符号现已普遍应用于手机短信和网络聊天软件. em ...