GBase 8s 当前版本所支持的 PL/SQL 语法与Oracle完全一致。需要注意,使用PL/SQL 语法需要显式设置环境变量SQLMODE为’ORACLE’后才能生效,默认情况下GBase 8s的SQLMODE为’GBASE’,此时不支持 PL/SQL 语法。
set environment sqlmode ‘oracle’;
PL/SQL子程序是可以重复调用的PL/SQL命名块,一般指过程和函数。通常,使用过程执行操作,使用函数计算并返回值。函数的结构与过程相同,但是函数必须包含RETURN子句,该子句指定函数返回的值的数据类型(过程不能有RETURN子句)。
子程序以子程序标题开始,该标题指定其名称和(可选)参数列表。子程序有以下几个部分:
声明部分(可选):本部分声明并定义局部类型、游标、常量、变量、异常。
可执行部分(必需):此部分包含一个或多个用于赋值、控制执行和操作数据的语句。
异常处理部分(可选):此部分包含处理运行时错误的代码。
使用call加子程序名加参数的方式调用子程序,如果子程序没有参数,或者为每个参数指定了默认值,则可以省略参数列表或指定空参数列表。调用子程序的形式如下:
call subprogram_name [ ( [ parameter [, parameter]… ] ) ]
下面是创建并调用子程序的示例,使用“/”作为判断语句结束的标志:
示例一:创建并调用函数:
CREATE FUNCTION p1 (original NUMBER)
RETURN NUMBER
AS
original_squared NUMBER;
BEGIN
original_squared := original * original;
RETURN original_squared;
END;
/
调用代码及结果如下:
SELECT p1 (100) FROM dual;
结果:
10000.0000000000
示例二:创建并调用过程:
CREATE OR REPLACE PROCEDURE p2 AS
BEGIN
FOR i IN 1…5 LOOP
DBMS_OUTPUT.PUT_LINE(i || '! = ’ || f_6_7(i));
END LOOP;
END ;
/
调用代码及结果如下:
call p2();
结果:
1! =1
2! =2
3! =6
4! =24
5! =120