从局部变量 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是一个数字变量,那么,在这种情况下,没有注入风险.