当前位置:  开发笔记 > 数据库 > 正文

DB2/400替代打开游标

如何解决《DB2/400替代打开游标》经验,为你挑选了1个好方法。

我正在运行DB2 for i,V7R2 TR3.

我被告知打开游标会提供很多开销,应该尽可能避免.从我所读到的,使用EXECUTE INTO var1 USING var2是另一种选择,但我不能让它工作.我收到SQL0104错误.

这是我的存储过程:

BEGIN 
DECLARE STMT1 VARCHAR ( 500 ) ;     

SET STMT1 =     'SELECT SUBSTR (''' || TRIM(ITEM) || ''' , ( LENGTH ( TRIM ( PREFIX ) ) + 1 ) , ( 20 - LENGTH ( TRIM ( PREFIX ) ) ) ) ' ||
                'FROM   MYLIB.MYTABLE ' ||
                'WHERE  PREFIX = SUBSTR(''' || TRIM(ITEM) || ''', 0,LENGTH ( TRIM ( PREFIX ) ) + 1 ) ' ||
                'AND    SEQ1 = ' || TYPE || ' ' ||
                'ORDER BY   LENGTH ( TRIM ( PREFIX) ) DESC , TRIM (PREFIX) DESC ' ||
                'FETCH FIRST 1 ROWS ONLY ';

PREPARE S1 FROM STMT1; 
EXECUTE S1 INTO BASEITEM;

--OPEN C1 ; 
--  FETCH C1 INTO BASEITEM ; 
--CLOSE C1 ; 

IF(TRIM(BASEITEM) = '') THEN
    SET BASEITEM = ITEM;
END IF;
END  ; 

它有三个变量定义如下:

IN ITEM CHAR(20) CCSID 37 DEFAULT  ''  , 
IN TYPE INT DEFAULT  1  , 
INOUT BASEITEM CHAR(20) DEFAULT  '' 

当我有EXECUTE INTO...这个将无法编译,如果我使用EXECUTE USING...它将编译但BASEITEM最终是空白并且IF语句解析为真.

我已经尝试过遵循EXECUTE文档,显然INTO只能用于CALLVALUES INTO声明.所以我接着尝试遵循VALUES INTO文档,但无法弄清楚如何使用它.

注意*:我想最终更改连接变量以使用参数标记,但我接下来会担心这一点.

我想我应该发布正在使用的表: MYLIB.MYTABLE

Column |Prefix|SEQ1|SEQ2|
Row 1  |aaa   |   1|   3|
Row 2  |aab   |   1|   3|
Row 3  |aabd  |   2|   4|

我基本上传入一个字符串,然后从字符串中删除最长的前缀.然后我返回了新的字符串. SEQ1只是前缀的类型(1或2),SEQ2是前缀的长度.



1> Charles..:

您收到错误,因为EXECUTE stmt INTO它不像您认为的那样工作.

真正的问题是,当您不需要时,您正尝试使用动态SQL.请改用静态.

BEGIN 

  SELECT SUBSTR (TRIM(ITEM), ( LENGTH ( TRIM ( PREFIX ) ) + 1 ) , ( 20 - LENGTH ( TRIM ( PREFIX ) ) ) )
    INTO BASEITEM
    FROM   MYLIB.MYTABLE 
   WHERE  PREFIX = SUBSTR(TRIM(ITEM), 0,LENGTH ( TRIM ( PREFIX ) ) + 1 )
          AND    SEQ1 = TYPE
   ORDER BY   LENGTH ( TRIM ( PREFIX) ) DESC , TRIM (PREFIX) DESC
   FETCH FIRST 1 ROWS ONLY;

IF(TRIM(BASEITEM) = '') THEN
    SET BASEITEM = ITEM;
END IF;
END  ;

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有