【问题标题】:Passing SEQUENCE NUMBER start from local variable RPGLE -> DB2从局部变量 RPGLE -> DB2 开始传递 SEQUENCE NUMBER
【发布时间】:2017-02-15 18:39:49
【问题描述】:
我试图使用存储在我的 RPGLE 程序的本地变量中的数字作为 DB2 序列的起始数字。这可能吗?比如:
Exec SQL
create sequence MySequence
start with :MYVAR
increment by 1
no maxvalue
no cycle;
是编译器的禁忌。有什么想法吗?。
最后,使用 DB2 后如何获取序列的 LAST 编号?我需要将该号码保存到 DTAARA 以备不时之需。
提前致谢,
【问题讨论】:
标签:
sql
db2
db2-400
rpgle
【解决方案1】:
您不能在create sequence 语句的start with 子句中使用主机变量。但是该语句可以动态准备。所以你可以这样做:
dcl-s myvar Packed(5:0);
dcl-s stmt Varchar(512);
stmt = 'create sequence MySequence ' +
'start with ' + %char(myvar) +
'increment by 1 ' +
'no maxvalue ' +
'no cycle';
exec sql execute immediate :stmt;
通常像这样连接 SQL 语句存在 SQL 注入风险,但如果 myvar 是数字变量,则在这种情况下,不存在注入风险。