在DB2中与其他活动一起声明游标会导致部署失败
在浏览了所有的互联网之后,我不得不回到原来的状态 总结: 当3行未注释时,DB2存储过程不会部署,否则它工作得非常好。猜猜为什么?仅供参考,我对DB2相当陌生 程序代码:在DB2中与其他活动一起声明游标会导致部署失败,db2,zos,Db2,Zos,在浏览了所有的互联网之后,我不得不回到原来的状态 总结: 当3行未注释时,DB2存储过程不会部署,否则它工作得非常好。猜猜为什么?仅供参考,我对DB2相当陌生 程序代码: CREATE PROCEDURE TESTDB2.PROC_NAME_GOES_HERE( IN P_ID INT , IN P_SEQ_NO_2 SMALLINT, IN P_SEQ_NO DECIMAL(3,0)) RESULT SETS 1 LANGUAGE SQL
CREATE PROCEDURE TESTDB2.PROC_NAME_GOES_HERE(
IN P_ID INT ,
IN P_SEQ_NO_2 SMALLINT,
IN P_SEQ_NO DECIMAL(3,0))
RESULT SETS 1
LANGUAGE SQL
NOT DETERMINISTIC
CALLED ON NULL INPUT
FENCED
MODIFIES SQL DATA
COLLID TESTDB2
WLM ENVIRONMENT TDB2ENV
ASUTIME LIMIT 5000000
RUN OPTIONS 'NOTEST(NONE,*,*,*)'
P1: BEGIN
DECLARE V_SEQ_NO DECIMAL(3,0);
DECLARE V_LVL INT;
DECLARE GLOBAL TEMPORARY TABLE SESSION.SEQ_NO_TABLE
(LVL INT NOT NULL, SEQ_NO DECIMAL(3,0) NOT NULL);
SET V_LVL = 0;
INSERT INTO SESSION.SEQ_NO_TABLE(LVL, SEQ_NO)
VALUES(V_LVL, P_SEQ_NO);
--**************************************************--
-- If I uncomment following 3 lines, deployment fails --
--DECLARE CUR_FFB CURSOR WITH RETURN FOR
--SELECT * FROM SESSION.SEQ_NO_TABLE;
--OPEN CUR_FFB;
END P1
错误:
部署TESTDB2.PROC\u NAME\u GOES\u here整数,SMALLINT,小数点3,0
运行
TESTDB2.PROC_NAME_转到这里-部署已启动
正在调用生成实用程序SYSPROC.DSNTPSMP
转换SQLPRINT 1 1DB2 SQL预编译器版本9 REL。1.0第1页
转换SQLPRINT 2 0指定的选项:STDSQLNO NEWFUNYES HOSTSQL ONEPASS MAR1,80 CCSID37
转换从-SYS2.DB2T.DSNEXITDSNHDECP加载的SQLPRINT 3 DSNHDECP
转换使用的SQLPRINT 4 0选项-指定或默认
转换SQLPRINT 5 APAST
将SQLPRINT 6转换为SQL
转换SQLPRINT 7 ATTACHTSO
转换SQLPRINT 8 CCSID37
转换SQLPRINT 9 NOPADNTSR
转换SQLPRINT 10连接2
转换SQLPRINT 11 DEC15
转换SQLPRINT 12 FLAGI
转换SQLPRINT 13 HOSTSQL
转换SQLPRINT 14行计数60
转换SQLPRINT 15页边距1,80
转换SQLPRINT 16 NEWFUNYES
转换SQLPRINT 17 ONEPASS
转换SQLPRINT 18选项
转换SQLPRINT 19期间
转换SQLPRINT 20 NOSOURCE
转换SQLPRINT 21 STDSQLNO
将SQLPRINT转换为SQLDB2
转换SQLPRINT 23 NOXREF
转换SQLPRINT 24 1DB2 SQL预编译器消息第2页
需要转换SQLPRINT 25 0DSNH016I E DSNHPAR第26行第10列全局
转换SQLPRINT 26 DSNH104I E DSNHPAR行26列10非法符号CUR_FFB。一些可能合法的符号是:全局
转换SQLPRINT 27 1DB2 SQL预编译器统计信息第3页
转换SQLPRINT 28 0源统计信息
将SQLPRINT 29源行转换为:32
转换SQLPRINT 30符号数:14
转换SQLPRINT 31符号表字节,不包括属性:1952
转换SQLPRINT 32-此程序有2条消息
CONVERT SQLPRINT 33标记选项抑制了0条消息
CONVERT SQLPRINT 34预编译器使用了272544字节的存储空间
CONVERT SQLPRINT 35返回代码为8
需要转换SQLTERM 1 DSNH016I E DSNHPAR第26行第10列全局
转换SQLTERM 2 DSNH104I E DSNHPAR第26行第10列非法符号CUR_FFB。一些可能合法的符号是:全局
转换SQLTERM 3创建过程TESTDB2.PROC_NAME_GOES_此处p_ID INT,p_SEQ_NO_2 SMALLINT,p_SEQ_NO DECIMAL3,0RESULT S
CONVERT SQLTERM 4 ETS 1语言在空输入上调用SQL NOT DETERMINISTIC FENCED MODIFIES SQL DATA COLLID TESTDB2 WLM ENVIRONMENT TDB2ENV ASUTIME
转换SQLTERM 5 LIMIT 5000000运行选项'NOTESTNONE,,,*'P1:BEGIN DECLARE V_SEQ_NO DECIMAL3,0;声明V_LVL INT;声明全局临时
转换SQLTERM 6 Y TABLE SESSION.SEQ_NO_TABLELVL INT NOT NULL,SEQ_NO DECIMAL3,0 NOT NULL;设置V_LVL=0;插入会话。序号表
转换SQLTERM 7 EQ_NOVALUESV_LVL,p_序号;声明当前FFB
转换SQLTERM 8
转换SQLTERM 9源统计信息
将SQLTERM 10源代码行转换为:32
转换SQLTERM 11符号数:14
转换SQLTERM 12符号表字节,不包括属性:1952
CONVERT SQLTERM 13此程序有2条消息
CONVERT SQLTERM 14标志选项抑制了0条消息
CONVERT SQLTERM 15预编译器使用了272544字节的存储空间
CONVERT SQLTERM 16返回代码为8
DSNTPSMP控制台1*DB2 V9R1 SQL过程处理器DSNTPSMP 1.21 PM09148 2010-03-23
DSNTPSMP控制台2语言转换警告和/或错误,rc=8
DSNTPSMP控制台3 PSM预编译未成功,无法继续
DSNTPSMP摘要1请求:ALTER_REBUILD例程TESTDB2.PROC_NAME_GOES_此处未完成
请求的生成实用程序函数:ALTER\U REBUILD
SYSPROC.DSNTPSMP-返回+8
TESTDB2.PROC_NAME_转到这里-部署失败
TESTDB2.PROC_NAME_转到这里-回滚comp
删除成功
因此,最后它对我起了作用,只是做了一些小小的修改,为以后可能遇到这种困惑的任何人添加了一个解决方案 解决方案-在声明表之前声明游标 唯一让我困惑的是,我如何在一个甚至还不存在的对象上创建光标
CREATE PROCEDURE TESTDB2.PROC_NAME_GOES_HERE(
IN P_ID INT ,
IN P_SEQ_NO_2 SMALLINT,
IN P_SEQ_NO DECIMAL(3,0))
RESULT SETS 1
LANGUAGE SQL
NOT DETERMINISTIC
CALLED ON NULL INPUT
FENCED
MODIFIES SQL DATA
COLLID TESTDB2
WLM ENVIRONMENT TDB2ENV
ASUTIME LIMIT 5000000
RUN OPTIONS 'NOTEST(NONE,*,*,*)'
P1: BEGIN
DECLARE V_SEQ_NO DECIMAL(3,0);
DECLARE V_LVL INT;
DECLARE CUR_FFB CURSOR WITH RETURN FOR
SELECT * FROM SESSION.SEQ_NO_TABLE;
DECLARE GLOBAL TEMPORARY TABLE SESSION.SEQ_NO_TABLE
(LVL INT NOT NULL, SEQ_NO DECIMAL(3,0) NOT NULL);
SET V_LVL = 0;
INSERT INTO SESSION.SEQ_NO_TABLE(LVL, SEQ_NO)
VALUES(V_LVL, P_SEQ_NO);
OPEN CUR_FFB;
END P1