DB2存储过程学习
1.变量声明
SQL 过程允许使用本地变量赋予和获取 SQL 值,以支持所有 SQL 逻辑。在 SQL 过程中,在代码中使用本地变量之前要先进行声明。
下面是变量声明的一些例子:
DECLARE v_salary DEC(9,2) DEFAULT 0.0;
DECLARE v_status char(3) DEFAULT ‘YES’;
DECLARE v_descrition VARCHAR(80);
DECLARE v1, v2 INT DEFAULT 0;
DEFAULT 值 – 如果没有指定,在声明时将赋值为 NULL。
2.赋值
SQL PL 提供了 SET 语句来为变量和数组元素赋值。
下面是一个 SET 语句的简化的语法:
SET variable_name = value/expression/NULL;
这个变量名可以是一个本地变量、全局变量或数组元素的名称。
SET 语句的例子
SET var1 = 10;
SET total = (select sum(c1) from T1);
SET var2 = POSSTR(‘MYTEST’,’TEST’);
SET v_numb(10) = 20; -- assign value of 20 to the 10th element of the array v_numb
SET v_numb = ARRAY[1,2,3,4]; -- fill up array with values
为变量赋值的其他方法有:
VALUES INTO
SELECT (or FETCH) INTO
VALUE INTO 和 SELECT INTO 的例子
VALUES 2 INTO v1;
VALUES ‘TEST’ INTO var2;
SELECT SUM(c1) INTO var1 FROM T1;
SELECT POSSTR(‘MYTEST’,’TEST’) INTO v1 FROM SYSIBM.SYSDUMMY1;
3.专用寄存器
专用寄存器(special register)是 DBA 定义的一个存储块,供一个应用程序过程使用。寄存器中的值可以在 SQL 语句或 SQL PL 语句中访问和引用。
在 IBM DB2 database for Linux, UNIX, and Windows Information Center 可以找到所有的专用寄存器。
最常用的专用寄存器有:
CURRENT DATE
CURRENT TIME
CURRENT TIMESTAMP
CURRENT USER
CURRENT PATH
所有这些寄存器都可以通过在名称中加下划线来引用。例如,CURRENT_DATE。
返回当前日期和时间的过程
CREATE PROCEDURE get_datetime (out cdate date, out ctime time )
P1: BEGIN
VALUES CURRENT DATE INTO cdate;--
VALUES CURRENT TIME INTO ctime;--
END P1
执行后,该过程返回:
Name Input Output
cdate 2008-08-28
ctime 13:47:41