创建和使用 SPL 例程 / 从 SPL 函数返回值 |
图: 从表的单个行返回两个列值的 SPL 函数。
CREATE FUNCTION birth_date( num INTEGER ) RETURNING VARCHAR(30), DATE; DEFINE n VARCHAR(30); DEFINE b DATE; SELECT name, bdate INTO n, b FROM emp_tab WHERE emp_no = num; RETURN n, b; END FUNCTION;
该函数从 emp_tab 表的一行将两个值(名和生日)返回给调用的例程。在此情况下,必须准备调用的例程来处理返回的 VARCHAR 和 DATE 值。
图: 从多行返回多个值的 SPL 函数。
CREATE FUNCTION birth_date_2( num INTEGER ) RETURNING VARCHAR(30), DATE; DEFINE n VARCHAR(30); DEFINE b DATE; FOREACH cursor1 FOR SELECT name, bdate INTO n, b FROM emp_tab WHERE emp_no > num RETURN n, b WITH RESUME; END FOREACH; END FUNCTION;
RETURN 语句使用 WITH RESUME 关键字。当执行 RETURN WITH RESUME 时,将控制返回到调用的例程。但在下一次(通过 FETCH 或通过调用的例程中的游标的下一迭代)调用该 SPL 函数时,SPL 函数中的所有变量保持它们的相同的值,并从紧跟在 RETURN WITH RESUME 语句之后的语句继续执行。
database db1; create table ltab1(lcol1 integer, lcol2 boolean, lcol3 lvarchar); insert into ltab1 values(1, 't', "test string 1"); database db2; create table rtab1(r1col1 boolean, r1col2 blob, r1col3 integer) put r1col2 in (sbsp); create table rtab2(r2col1 lvarchar, r2col2 clob) put r2col2 in (sbsp); create table rtab3(r3col1 integer, r3col2 boolean, r3col3 lvarchar, r3col4 circle); create view rvw1 as select * from rtab3;(该示例为跨数据库 Insert。)
database db1; create view lvw1 as select * from db2:rtab2; insert into db2:rtab1 values('t', filetoblob('blobfile', 'client', 'db2:rtab1', 'r1col2'), 100); insert into db2:rtab2 values("inserted directly to rtab2", filetoclob('clobfile', 'client', 'db2:rtab2', 'r2col2')); insert into db2:rtab3 (r3col1, r3col2, r3col3) select lcol1, lcol2, lcol3 from ltab1; insert into db2:rvw1 values(200, 'f', "inserted via rvw1"); insert into lvw1 values ("inserted via lvw1", NULL);