简体   繁体   English

如何在 db2 iSeries as400 db 中使用 EXECUTE INTO 语句?

[英]How to use EXECUTE INTO statement in db2 iSeries as400 db?

I have a procedure with the following lines:我有一个包含以下几行的程序:

The value of ITERATOR is set dynamically in a loop ITERATOR 的值在循环中动态设置

  DECLARE V_LOSS_ID integer;
  DECLARE V_STATE_CODE CHARACTER(2);
  DECLARE V_CLASS_CODE CHARACTER(4);
  SET V_QUERY = 'set (?,?,?) = (select LOSS_ID, STATE_CODE, CLASS_CODE from LOSS L limit 1 offset '|| ITERATOR || ' )';
  PREPARE STMT FROM V_QUERY;
  EXECUTE STMT into V_LOSS_ID, V_STATE_CODE, V_CLASS_CODE;

I am getting the following error in iSeries db2 - [SQL0104] Token V_LOSS_ID was not valid.我在 iSeries db2 中收到以下错误 - [SQL0104] 令牌 V_LOSS_ID 无效。 Valid tokens: SQL DESCRIPTOR.有效令牌:SQL 描述符。

However, this procedure works on DB2 LUW database.但是,此过程适用于 DB2 LUW 数据库。 Facing this issue only on DB2 iseries as400 database仅在 DB2 iseries as400 数据库上面临此问题

EXECUTE in Db2 for IBM i has different functionality. IBM i 的 Db2 中的EXECUTE具有不同的功能。
So, use something like below:所以,使用类似下面的东西:

DECLARE ITERATOR ...;
DECLARE V_LOSS_ID integer;
DECLARE V_STATE_CODE CHARACTER(2);
DECLARE V_CLASS_CODE CHARACTER(4);
DECLARE C1 CURSOR FOR STMT;
...
--SET V_QUERY = 'set (?,?,?) = (select LOSS_ID, STATE_CODE, CLASS_CODE from LOSS L limit 1 offset '|| ITERATOR || ' )';
SET V_QUERY = 'select LOSS_ID, STATE_CODE, CLASS_CODE from LOSS L limit 1 offset '|| ITERATOR;
PREPARE STMT FROM V_QUERY;
--EXECUTE STMT into V_LOSS_ID, V_STATE_CODE, V_CLASS_CODE;
OPEN C1;
FETCH C1 INTO V_LOSS_ID, V_STATE_CODE, V_CLASS_CODE;
CLOSE C1;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM