インターネット中を見回した後、私はSOに戻らなければなりません:)。
概要:
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
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_NAME_GOES_HERE(INTEGER, SMALLINT, DECIMAL(3, 0)) をデプロイします。
ランニング
TESTDB2.PROC_NAME_GOES_HERE - デプロイが開始されました。
ビルド ユーティリティ SYSPROC.DSNTPSMP を呼び出しています...
CONVERT SQLPRINT 1 1DB2 SQL プリコンパイラ バージョン 9 REL。1.0 ページ 1
CONVERT SQLPRINT 2 0OPTIONS SPECIFIED: STDSQL(NO) NEWFUN(YES) HOST(SQL) ONEPASS MAR(1,80) CCSID(37)
CONVERT SQLPRINT 3 DSNHDECP LOADED FROM - (SYS2.DB2T.DSNEXIT(DSNHDECP))
CONVERT SQLPRINT 4 0OPTIONS USED - 指定またはデフォルト
SQLPRINT 5 APOST の変換
CONVERT SQLPRINT 6 APOSTSQL
CONVERT SQLPRINT 7 ATTACH(TSO)
CONVERT SQLPRINT 8 CCSID(37)
CONVERT SQLPRINT 9 NOPADNTSTR
CONVERT SQLPRINT 10 CONNECT(2)
CONVERT SQLPRINT 11 DEC(15)
CONVERT SQLPRINT 12 フラグ(I)
CONVERT SQLPRINT 13 ホスト (SQL)
CONVERT SQLPRINT 14 LINECOUNT(60)
CONVERT SQLPRINT 15 MARGINS(1,80)
CONVERT SQLPRINT 16 NEWFUN(YES)
CONVERT SQLPRINT 17 ONEPASS
SQLPRINT 18 オプションの変換
CONVERT SQLPRINT 19 PERIOD
SQLPRINT 20 NOSOURCE の変換
CONVERT SQLPRINT 21 STDSQL(いいえ)
CONVERT SQLPRINT 22 SQL(DB2)
CONVERT SQLPRINT 23 NOXREF
CONVERT SQLPRINT 24 1DB2 SQL プリコンパイラ メッセージ ページ 2
CONVERT SQLPRINT 25 0DSNH016I E DSNHPARS 行 26 COL 10 "GLOBAL" が必要です
CONVERT SQLPRINT 26 DSNH104I E DSNHPARS LINE 26 COL 10 ILLEGAL SYMBOL "CUR_FFB". 合法であるかもしれないいくつかのシンボルは次のとおりです: グローバル
CONVERT SQLPRINT 27 1DB2 SQL プリコンパイラ統計ページ 3
CONVERT SQLPRINT 28 0SOURCE STATISTICS
CONVERT SQLPRINT 29 ソース行の読み取り: 32
CONVERT SQLPRINT 30 シンボル数: 14
属性を除く SQLPRINT 31 シンボル テーブル バイトの変換: 1952
CONVERT SQLPRINT 32 - このプログラムには 2 つのメッセージがありました。
CONVERT SQLPRINT 33 フラグ オプションによって抑制されたメッセージはありません。
CONVERT SQLPRINT 34 272544 バイトのストレージがプリコンパイラによって使用されました。
CONVERT SQLPRINT 35 戻りコードは 8 です
CONVERT SQLTERM 1 DSNH016I E DSNHPARS 行 26 COL 10 "GLOBAL" が必要です
CONVERT SQLTERM 2 DSNH104I E DSNHPARS LINE 26 COL 10 ILLEGAL SYMBOL "CUR_FFB". 合法であるかもしれないいくつかのシンボルは次のとおりです: グローバル
CONVERT SQLTERM 3 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 S
CONVERT SQLTERM 4 ETS 1 LANGUAGE SQL NOT DETERMINISTIC CALLED ON NULL INPUT FENCED MODIFIES SQL DATA COLLID TESTDB2 WLM ENVIRONMENT TDB2ENV ASUTIME
CONVERT SQLTERM 5 LIMIT 5000000 RUN OPTIONS'NOTEST(NONE, , ,*)'P1 : BEGIN DECLARE V_SEQ_NO DECIMAL(3,0); DECLARE V_LVL INT ; グローバル TEMPORAR を宣言する
CONVERT SQLTERM 6 Y 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,S
CONVERT SQLTERM 7 EQ_NO)VALUES(V_LVL,P_SEQ_NO); CUR_FFB を宣言する
SQLTERM 8 の変換
SQLTERM 9 ソース統計の変換
CONVERT SQLTERM 10 ソース行 READ: 32
CONVERT SQLTERM 11 記号の数: 14
属性を除く SQLTERM 12 SYMBOL テーブル バイトの変換: 1952
CONVERT SQLTERM 13 このプログラムには 2 つのメッセージがありました。
CONVERT SQLTERM 14 フラグ オプションによって抑制されたメッセージはありません。
CONVERT SQLTERM 15 272544 バイトのストレージがプリコンパイラによって使用されました。
SQLTERM 16 を変換すると、戻りコードは 8 になります。
DSNTPSMP コンソール 1 * DB2 V9R1 SQL プロシージャー プロセッサー DSNTPSMP 1.21 (PM09148 2010-03-23)
DSNTPSMP CONSOLE 2 言語変換の警告および/またはエラー、rc=8
DSNTPSMP CONSOLE 3 PSM プリコンパイルが失敗したため、続行できません
DSNTPSMP 要約 1 要求: ALTER_REBUILD ルーチン TESTDB2.PROC_NAME_GOES_HERE が完了しませんでした。
要求されたビルド ユーティリティ関数: ALTER_REBUILD
SYSPROC.DSNTPSMP - +8 が返される
TESTDB2.PROC_NAME_GOES_HERE - デプロイに失敗しました。
TESTDB2.PROC_NAME_GOES_HERE - ロールバックが正常に完了しました。