从局部变量 RPGLE -> DB2 开始传递序列号
Passing SEQUENCE NUMBER start from local variable RPGLE -> DB2
我正在尝试使用存储在我的 RPGLE 程序的本地变量中的数字作为 DB2 序列的起始编号。这可能吗?类似于:
Exec SQL
create sequence MySequence
start with :MYVAR
increment by 1
no maxvalue
no cycle;
是编译器的禁忌。有什么想法吗?
最后,使用 DB2 如何在使用后获取序列的最后一个编号?我需要将该号码保存到 DTAARA 中以供保存。
提前致谢,
您不能在 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
是一个数字变量,那么,在这种情况下,没有注入风险.
我正在尝试使用存储在我的 RPGLE 程序的本地变量中的数字作为 DB2 序列的起始编号。这可能吗?类似于:
Exec SQL
create sequence MySequence
start with :MYVAR
increment by 1
no maxvalue
no cycle;
是编译器的禁忌。有什么想法吗?
最后,使用 DB2 如何在使用后获取序列的最后一个编号?我需要将该号码保存到 DTAARA 中以供保存。
提前致谢,
您不能在 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
是一个数字变量,那么,在这种情况下,没有注入风险.