PLSQL入门与精通(第22章:函数语法)

上次就存储和函数的概要进行了解说。
函数是有返回值,呼叫的方法直接可以作为变量带入,这2点和过程有很大的不同。

从这次开始,我们就来解说函数的基本语法构成。

首先是存储函数的制作语法,与过程的制作语法没有太大的变化。

以下主要说明与过程的不同之处:

<<存储函数的创建语法>>
1 CERATE OR REPLACE FUCTION 功能名称(临时参数名称 模式 数据型,…)
2 RETURNN 数据型
3 IS
4 宣言部
5 BEGIN
6 执行部
7 RETURN值;
8 EXCEPTION
9 例外处理部
10 END;

那么,我来解释一下和过程的区别。
●函数生成的关键字(第1行)不是“PROCEDURE”而是“FUCTION”。
CREATE OR REPLACE 是 “FUCTION”。

●临时参数模式(第1行)仅使用“IN”。
临时参数模式使用“IN”。
正确地说,其他模式(「OUT」、「IN OUT」)也是可以使用的,但是这种使用并不常见,会造成混乱,所以按照惯例只使用「IN」。

●需要返回的数据类型(第2行)
在“IS”之前指定该函数返回值的数据类型。(RETURN数据型)
该数据类型与临时参数的数据类型相同,无法指定长度。
无论是临时参数还是RETURN的数据类型,都会用于与调用方之间的值交换,因此长度不能限定。

(例)
RETURN VARCHAR2(10)→编译错误
RETURN VARCHAR2 → OK

※%TYPE和%ROWTYPE的指定也可以与临时参数相同。

●执行部的最后是RETURN语句。(第7行)
函数通过返回值(RETURN)结束执行。
请注意,即使RETURN处理后记述了什么处理,也不会执行。
函数必须要返回(RETURN)为最后的处理。

那么作为具体的事例,以下将以本电子杂志第20回解说的发号处理的程序为函数的内容登载出来。

在右边评论了与过程不同的地方。

SQL> L
1CREATE OR REPLACE FUCTION FUNK-顺序编号 ←关键词为FUCTION
2(P_发号单位 IN VARCHAR2)–←临时参数的模式仅限IN
3 RETURN NUMBER- ←声明RETURN的数据类型
4 IS
5 V_已编号 顺序.编号%TYPE;
6 V_编号 NUMBER;
7 BEGIN
8 --将指定的发号单位+1后,保存到变量中
9 UPDATE顺序
10 SET 编号 = 编号 + 1
11 WERE 发号单位 = P_发号单位
12 RETURNING 编号 INTO V_编号;
13 --将该变量的值RETURN
14 RETURN V_编号;-←返回值后结束
15* END;
SQL> /

功能已创建。

简单说明一下内容,该功能是将顺序表中指定的发号单位的编号加1足,并返回该值。

例如,发号单位“订购ID”的当前号码是3号。
请看以下的查询。
SQL>select * from 顺序 where 发号单位 = ‘订购ID’;

发号单位编号
‘’------------------------------
订单ID 3

在此状态下,以发号为单位指定“订购ID”,调用4次该功能,通过dbmsoutput.put_line在画面上显示。

函数调用本身就变量,所以直接作为dbmsoutputl.put_line的参数使用。
这样的话,3号以后的值应该会返还4、5、6、7。

试试看吧。

SQL> ed

file afiedt.buf已写入。

1 begin
2 dbms_output.put_line(FUNK_顺序号码(“订购ID”);
3 dbms_output.put_line(FUNK_顺序号码(“订购ID”);
4 dbms_output.put_line(FUNK_顺序号码(“订购ID”);
5 dbms_output.put_line(FUNK_顺序号码(“订购ID”);
6* end;

SQL> /

4←FUNK_顺序函数返回的值
5←FUNK_顺序函数返回的值
6←FUNK_顺序函数返回的值
7←FUNK_顺序函数返回的值

PL/SQL过程成功完成。

确实,3号以后的号码是4、5、6、7号。

这是测试,所以rollback。

SQL> rollback;

回滚完成。

那么,这次就到此为止。

下次,解说功能的详细内容。

猜你喜欢

转载自blog.csdn.net/niusr_1980_01/article/details/114210224