SQL记录-PLSQL过程
PL/SQL过程
子程序是一个程序单元/模块执行特定的任务。这些子程序被组合以形成更大的程序。这基本上是被称为“模块化设计”。子程序可以调用由另一个子程序或程序被称为调用程序。
子程序可以创建:
在模式层面
在包里面
在一个PL/SQL块内
模式级子程序是一个独立的子程序。它使用CREATE PROCEDURE或CREATE FUNCTION语句创建。它被存储在数据库中,并且可以使用DROP PROCEDURE或DROP FUNCTION语句被删除。
一个包内创建的一个子程序是一个封装子程序。它被存储在数据库中,仅当包被删除使用DROP PACKAGE语句可以被删除。我们将讨论在"PL/SQL - 包“ 章节中。
PL/SQL子程序被命名,可使用一组参数来调用PL/SQL块。 PL/SQL提供两种子程序:
函数:这些子程序返回一个值,主要用于计算并返回一个值。
过程:这些子程序没有直接返回值,主要用于执行操作。
本章将重点介绍PL/SQL的过程的重内容,我们将在下一章介绍学习"PL/SQL函数“。
PL/SQL子程序部分
每个PL/SQL子程序有一个名称,并且可以具有一个参数列表。就像匿名PL/SQL块,并命名块子程序也将有以下三个部分:
| S.N. | 部分 & 描述 |
|---|---|
| 1 | 声明部分 它是一个任选的组成部分。然而声明部分用于子程序并在开始时使用DECLARE关键字。它包含:类型,光标,常量,变量,异常和嵌套子程序声明。这些项局部于子程序和停止时,子程序完成执行完成前存在。 |
| 2 | 执行部分 这是一个强制性的一部分,包含执行指定操作语句 |
| 3 | 异常处理部分 这也是一个可选部分,它包含处理运行时错误的代码。 |
创建过程
过程使用CREATE OR REPLACE PROCEDURE语句创建,使用CREATE OR REPLACE PROCEDURE语句简化语法如下:
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
{IS | AS}
BEGIN
< procedure_body >
END procedure_name;
这里,
procedure-name 指定的程序的名称
[OR REPLACE] 选项允许修改现有的程序
可选的参数列表中包含的名称,模式和类型的参数。IN表示该值将被从外部传递,OUT表示该参数将被用于从过程返回一个值到外面
procedure-body 包含可执行部分
AS关键字来代替了IS关键字用于创建一个独立的程序。
例子:
下面的示例创建一个字符串的简单过程执行时将'Hello World!“显示在屏幕上。
CREATE OR REPLACE PROCEDURE greetings
AS
BEGIN
dbms_output.put_line('Hello World!');
END;
/
当上面的代码中使用SQL提示执行,它会产生以下结果:
Procedure created.
执行独立程序
一个独立的程序可以有两种方式调用:
使用EXECUTE关键字
从PL/SQL块调用过程的名称
名为“greetings”的上述程序可以调用EXECUTE关键字为:
EXECUTE greetings;
上述调用会显示:
Hello World PL/SQL procedure successfully completed.
程序也可以从另一个PL/SQL块调用:
BEGIN
greetings;
END;
/
上述调用会显示:
Hello World PL/SQL procedure successfully completed.
删除独立程序
一个独立的程序使用DROP PROCEDURE语句删除。删除一个程序的语法是:
DROP PROCEDURE procedure-name;
所以,可以使用下面的语句删除 greetings :
BEGIN
DROP PROCEDURE greetings;
END;
/
PL/SQL子程序参数模式
| S.N. | 参数模式 & 描述 |
|---|---|
| 1 | IN 一个IN参数传递一个值到子程序。它是一个只读的参数。内部的子程序,一个IN参数的作用就像一个常数。它不能再被分配值。 可以通过一个常量,文字,初始化变量或表达式作为一个IN参数。也可以把它初始化为默认值;然而,在这种情况下,它从子程序调用删去。这就是参数传递的默认模式。参数是通过引用传递。 |
| 2 | OUT OUT参数返回一个值到调用程序。在内部的子程序OUT参数就像一个变量。可以改变它的值并引用分配后的值。实际参数必须是变量,它是按值传递。 |
| 2 | IN OUT 一个IN OUT参数传递的初始值到一个子程序,并返回一个更新值给调用者。它可以被分配一个值,其值可被读取。 对应一个IN OUT形式参数的实际参数必须是一个变量,不是常量或表达式。形参必须分配一个值。实际参数就是按值传递。 |
IN & OUT 模式示例 1
该程序查找两个值中的最小值,这里过程使用IN模式接收两个数字,并使用OUT参数返回它们的最小值。
DECLARE
a number;
b number;
c number; PROCEDURE findMin(x IN number, y IN number, z OUT number) IS
BEGIN
IF x < y THEN
z:= x;
ELSE
z:= y;
END IF;
END; BEGIN
a:= 23;
b:= 45;
findMin(a, b, c);
dbms_output.put_line(' Minimum of (23, 45) : ' || c);
END;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
Minimum of (23, 45) : 23 PL/SQL procedure successfully completed.
IN & OUT 模式示例2
这个程序计算传递值的平方值。这个例子表明我们如何能够用相同的参数接受的值,然后返回另一个结果。
DECLARE
a number;
PROCEDURE squareNum(x IN OUT number) IS
BEGIN
x := x * x;
END;
BEGIN
a:= 23;
squareNum(a);
dbms_output.put_line(' Square of (23): ' || a);
END;
/
当上述代码在SQL提示符执行时,它产生了以下结果:
Square of (23): 529 PL/SQL procedure successfully completed.
方法传递参数
实际参数可以通过以下三种方式:
位置标记
命名符号
混合符号
位置表示法
在位置符号,可以调用的程序为:
findMin(a, b, c, d);
在位置表示法中,第一实际参数代入所述第一形式参数;第二实际参数代入所述第二形式参数,依此类推。那么,a取代x,b是取代为y,c为取代z以及d被代替m。
命名表示法
名为符号,实际参数与使用箭头符号的形式参数相关的(=>)。所以程序调用将如下所示:
findMin(x=>a, y=>b, z=>c, m=>d);
混合表示法
在混合符号表示法中,可以混合这两种写法过程调用;但是,位置标记应先于指定符号。
下面的调用是合法的:
findMin(a, b, c, m=>d);
但是,这样是不合法的:
findMin(x=>a, b, c, d);
SQL记录-PLSQL过程的更多相关文章
- SQL记录-PLSQL函数
PL/SQL函数 PL/SQL函数与过程相同,不同之处在于函数有一个返回值.因此,前面的章节中的所有讨论都适用于函数. 创建函数 建立一个独立函数可以使用CREATE FUNCTION语句创建.CRE ...
- SQL记录-PLSQL记录
PL/SQL记录 PL/SQL记录就是可以容纳不同类型的数据项的数据结构.记录由不同字段,类似于数据库表的行. 例如,要保留跟踪图书馆中的书籍.可能要跟踪有关每本书下面的属性类似:标题,作者,主题 ...
- SQL记录-PLSQL基本语法与数据类型
PL/SQL基本语法 PL/SQL是一种块结构的语言,这意味着PL/SQL程序被划分和编写代码的逻辑块.每块由三个子部分组成: S.N. 段和说明 1 声明 此部分开头使用关键字DECLARE.它是一 ...
- SQL记录-PLSQL包
PL/SQL包 PL/SQL包是组逻辑相关的PL/SQL类型,变量和子程序模式对象. 程序包将有两个强制性的部分: 包装规范定义 包体或定义 包装规范定义 规范是接口到包.它只是声明的类型,变量,常量 ...
- SQL记录-PLSQL游标
PL/SQL游标 Oracle会创建一个存储区域,被称为上下文区域,用于处理SQL语句,其中包含需要处理的语句,例如所有的信息,行数处理,等等. 游标是指向这一上下文的区域. PL/SQL通过控制光标 ...
- SQL记录-PLSQL循环
PL/SQL循环 可能有一种情况,当需要执行的代码块的几个多次.在一般情况下,语句顺序执行:一个函数的第一条语句,首先执行,然后是第二个...等等. 编程语言提供了各种控制结构,允许更多复杂的执行 ...
- SQL记录-PLSQL条件控制
PL/SQL条件控制 决策结构需要程序员指定一个或多个条件要计算,或由程序进行测试,如果条件被确定为真那么一条或多条语句被执行,如果要被执行的其它语句条件被确定为假,则选其它执行块. 以下是从在大 ...
- SQL记录-PLSQL变量与常量文字
PL/SQL变量 变量是只不过是一个给定的存储区域,程序可以操纵的名称.PL/SQL每个变量具有一个特定的数据类型,它决定了大小和变量的存储器的值,可以说存储器和设置操作可以施加到可变内被存储的范 ...
- SQL记录-PLSQL触发器
PL/SQL触发器 触发器是存储程序,它会自动执行或发射当一些事件发生.触发器,事实上,写入响应于以下任一事件将被执行: 数据库操作(DML)语句(DELETE,INSERT,UPDATE或) 数据库 ...
随机推荐
- 将WebService部署到 SharePoint 2010 gac 缓存中,并用Log4Net记录日志到数据库
最近做了一个sharePoint项目,需要实现的功能是,第三方网站访问我们sharePoint中的数据,通过Webservice方式实现文件的上传和下载. 于是代码工作完成了之后,本地调试没什么问题, ...
- cbuild-一个创建和管理C++项目的工具
cbuild-一个创建和管理C++项目的工具 介绍: 这是个人开发的一个管理C++项目的工具,用shell脚本编写. 可能会不定期更新,也欢迎大家一起完善. 当前开发版本0.5.各版本功能如下: ve ...
- Jenkins分布式构建
Jenkins分布式构建 有时,如果有一个实例,它是一个更大,更重的项目,需要定期编译生成在许多计算机上.并运行所有这些构建了中央台机器上可能不是最好的选择.在这种情况下,人们可以配置其他Jenkin ...
- 通过拓展Function.prototype实现一个AOP
AOP(面向切面的编程)主要是将一些与核心业务逻辑模块无关的功能抽离出来,这些功能通常包括日志统计,安全控制,或者是异常处理等等. 我们要做的就是拓展Function.prototype来“动态植入” ...
- C++ 继承和派生介绍
继承(inheritance)是软件重用的一种方式,程序员通过继承可以吸收已有类的数据和行为来创建新类,并可以添加新的数据和行为来增强类的功能.创建新类时,并不需要创建全新的数据和成员函数,我们可以指 ...
- 炸弹人的Alpha版使用说明
本游戏是一款手机游戏,学生可以在无聊时打发时间,放松心情.现在只有三关,但游戏运行还算可以. 注意事项: 目前游戏还有一些不好的地方,游戏无法暂停,如果游戏任务死亡,则无法重开. 游戏后面的关卡还需要 ...
- 四则运算APP最后阶段
四则运算APP最后阶段 [开发环境]:eclipse [开发项目]:小学生四则运算APP [开发人员]:郑胜斌 http://www.cnblogs.com/zsb1/ 孔德颖 http://www. ...
- 团队作业5——英语学习/词典App行业Top5
来自权威研究机构易观智库的最新数据表明,国内几家主流词典类App市场的份额占比差异化分布进一步加剧. 对于156万安卓移动端活跃数字消费者的移动互联网行为监测结果显示,截至2014年8月底,有道词典A ...
- [转帖]DRAM芯片战争,跨越40年的生死搏杀
DRAM芯片战争,跨越40年的生死搏杀 超级工程一览 ·2017-08-20 12:50·半导体行业观察 阅读:1.4万 来源:内容来自超级工程一览 , 谢谢. DRAM是动态随机存储器的意思,也就是 ...
- python基础教程1:入门基础知识
写在系列前,一点感悟 没有梳理总结的知识毫无价值,只有系统地认真梳理了才能形成自己的知识框架,否则总是陷入断片儿似的学习-遗忘循环中. 学习方法真的比刻苦"傻学"重要多了,而最重要 ...