在模式级别,存储过程是独立子程序,它是使用CREATE PROCEDURE或CREATE FUNCTION语句创建的,它存储在数据库中,可以使用DROP PROCEDURE或DROP FUNCTION语句删除。
PL/SQL子程序被称为PL/SQL块,可以使用一组参数来调用它们。 PL/SQL提供两种子程序-
Functions - 这些函数返回单个值,主要用于计算和返回值。
Procedures - 这些存储过程不直接返回值,主要用于执行动作。
本章将介绍 PL/SQL过程的重要方面。无涯教程将在下一章讨论 PL/SQL函数。
存储过程
每个PL/SQL子程序都有一个名称,也可以有一个参数列表,像匿名PL/SQL块一样,命名块也将具有以下三个部分-
S.No | Parts & 描述 |
---|---|
1 |
Declarative Part 这是一个可选部分。但是,子程序的声明部分不是以DECLARE关键字开头,它包含类型,游标,常量,变量,异常和嵌套子程序的声明,这些项目在子程序中是本地的,并且在子程序完成执行时不再存在。 |
2 |
Executable Part 这是必不可少的部分,包含执行指定动作的语句。 |
3 |
Exception-handling 这也是可选部分,它包含处理运行时错误的代码。 |
创建存储程序
使用 CREATE或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;
下面的示例创建一个简单的过程,该过程show character串" Hello World!"。执行时在屏幕上显示。
CREATE OR REPLACE PROCEDURE greetings AS BEGIN dbms_output.put_line('Hello World!'); END; /
使用SQL提示执行上述代码时,将产生以下输出-
Procedure created.
执行存储过程
可以通过两种方式调用-
使用 EXECUTE 关键字
从PL/SQL块中调用过程名称
可以使用EXECUTE关键字将上述名为'greetings'的过程调用为-
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;
您可以使用以下语句删除问候语过程-
DROP PROCEDURE greetings;
存储过程参数
下表列出了PL/SQL子程序中的参数模式-
S.No | Parameter Mode & 描述 |
---|---|
1 |
IN IN参数使您可以将值传递给子程序,这是一个只读参数,在子程序内部,IN参数的作用类似于常量。 |
2 |
OUT OUT参数将值返回到调用程序,在子程序中,OUT参数的作用类似于变量,您可以更改其值,并在分配后引用该值。 |
3 |
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.
参数传递方法
实际参数可以通过三种方式传递-
- Positional 符号
- Named 符号
- Mixed 符号
Positional符号
在位置表示法中,您可以将过程称为-
findMin(a, b, c, d);
在位置表示法中,第一个实际参数代替第一个形式参数;第二个实际参数代替第二个形式参数,依此类推。因此,用 a 替代 x,用b 替代 y,用c 替代 z 和 d 代替 m
Named符号
在命名符号中,实际参数与使用箭头符号(=>)的形式参数相关联,过程调用将类似于以下内容-
findMin(x => a, y => b, z => c, m => d);
Mixed符号
在混合表示法中,您可以在过程调用中混合使用两种表示法,但是,位置符号应在命名符号之前。
以下是合法的-
findMin(a, b, c, m => d);
但是,这是不合法的:
findMin(x => a, b, c, d);
参考链接
https://www.learnfk.com/plsql/plsql-procedures.html
标签:无涯,参数,PROCEDURE,SQL,Procedures,子程序,PL,OUT From: https://blog.51cto.com/u_14033984/8937252