Декларирането на курсор в DB2 с друга дейност води до неуспешно внедряване

След като разгледах целия интернет, трябва да се върна на SO :).

Резюме:

Съхранената процедура на DB2 не се разгръща, когато 3 реда не са коментирани, иначе работи перфектно. Някакви предположения защо? За информация, аз съм нов в 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 PRECOMPILER ВЕРСИЯ 9 REL. 1.0 СТРАНИЦА 1

CONVERT SQLPRINT 2 0ПОСОЧЕНИ ОПЦИИ: STDSQL(NO) NEWFUN(YES) HOST(SQL) ONEPASS MAR(1,80) CCSID(37)

КОНВЕРТИРАНЕ НА SQLPRINT 3 DSNHDECP, ЗАРЕДЕН ОТ - (SYS2.DB2T.DSNEXIT(DSNHDECP))

КОНВЕРТИРАНЕ НА SQLPRINT 4 ИЗПОЛЗВАНИ ОПЦИИ - ПОСОЧЕНИ ИЛИ ПО ПОДРАЗБИРАНЕ

CONVERT SQLPRINT 5 APOST

КОНВЕРТИРАНЕ SQLPRINT 6 APOSTSQL

CONVERT SQLPRINT 7 ATTACH(TSO)

КОНВЕРТИРАНЕ НА SQLPRINT 8 CCSID(37)

CONVERT SQLPRINT 9 NOPADNTSTR

CONVERT SQLPRINT 10 CONNECT(2)

CONVERT SQLPRINT 11 DEC(15)

КОНВЕРТИРАНЕ НА SQLPRINT 12 FLAG(I)

CONVERT SQLPRINT 13 HOST(SQL)

КОНВЕРТИРАНЕ НА SQLPRINT 14 LINECOUNT(60)

CONVERT SQLPRINT 15 MARGINS(1,80)

КОНВЕРТИРАНЕ НА SQLPRINT 16 NEWFUN(ДА)

CONVERT SQLPRINT 17 ONEPASS

CONVERT SQLPRINT 18 ОПЦИИ

CONVERT SQLPRINT 19 ПЕРИОД

CONVERT SQLPRINT 20 NOSOURCE

CONVERT SQLPRINT 21 STDSQL(NO)

КОНВЕРТИРАНЕ SQLPRINT 22 SQL(DB2)

CONVERT SQLPRINT 23 NOXREF

CONVERT SQLPRINT 24 1DB2 SQL ПРЕДКОМПИЛАТОР СЪОБЩЕНИЯ СТРАНИЦА 2

CONVERT SQLPRINT 25 0DSNH016I E DSNHPARS LINE 26 COL 10 "GLOBAL" REQUIRED

CONVERT SQLPRINT 26 DSNH104I E DSNHPARS LINE 26 COL 10 НЕЗАКОНЕН СИМВОЛ "CUR_FFB". НЯКОИ СИМВОЛИ, КОИТО МОЖЕ ДА СА ЗАКОННИ, СА: ГЛОБАЛНИ

CONVERT SQLPRINT 27 СТРАНИЦА 3 СТАТИСТИКА НА 1DB2 SQL PRECOMPILER

CONVERT SQLPRINT 28 0СТАТИСТИКА ЗА ИЗХОДНИЦИ

CONVERT SQLPRINT 29 ИЗХОДНИ РЕДОВЕ ПРОЧЕТЕТЕ: 32

CONVERT SQLPRINT 30 БРОЙ СИМВОЛИ: 14

КОНВЕРТИРАНЕ НА SQLPRINT 31 БАЙТА СИМВОЛНА ТАБЛИЦА ИЗКЛЮЧВАНЕ НА АТРИБУТИ: 1952

CONVERT SQLPRINT 32 -ИМАШЕ 2 СЪОБЩЕНИЯ ЗА ТАЗИ ПРОГРАМА.

КОНВЕРТИРАНЕ НА SQLPRINT 33 ИМАШЕ 0 СЪОБЩЕНИЯ, ПОТИСНАТИ ОТ ОПЦИЯТА ЗА ФЛАГ.

CONVERT SQLPRINT 34 272544 БАЙТА СЪХРАНЕНИЕ БЯХА ИЗПОЛЗВАНИ ОТ ПРЕДКОМПИЛАТОРА.

КОНВЕРТИРАНЕ НА SQLPRINT 35 КОДЪТ ЗА ВРЪЩАНЕ Е 8

CONVERT SQLTERM 1 DSNH016I E DSNHPARS LINE 26 COL 10 "GLOBAL" REQUIRED

CONVERT SQLTERM 2 DSNH104I E DSNHPARS РЕД 26 COL 10 НЕЗАКОНЕН СИМВОЛ "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

КОНВЕРТИРАНЕ НА SQLTERM 4 ETS 1 ЕЗИК SQL НЕДЕТЕРМИНИСТЕН ИЗВИКАН НА NULL INPUT ОГРАНИЧЕН МОДИФИКАТОР SQL ДАННИ COLLID TESTDB2 WLM СРЕДА TDB2ENV ASUTIME

CONVERT SQLTERM 5 LIMIT 5000000 RUN OPTIONS'NOTEST(NONE,,,*)'P1 : BEGIN DECLARE V_SEQ_NO DECIMAL(3,0); DECLARE V_LVL INT; ДЕКЛАРИРАЙТЕ ГЛОБАЛНО ВРЕМЕННО

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

CONVERT SQLTERM 8

CONVERT SQLTERM 9 ИЗТОЧНИ СТАТИСТИКИ

КОНВЕРТИРАНЕ НА SQLTERM 10 ИЗХОДНИ РЕДОВЕ ПРОЧЕТЕТЕ: 32

CONVERT SQLTERM 11 БРОЙ СИМВОЛИ: 14

КОНВЕРТИРАНЕ НА SQLTERM 12 СИМВОЛНИ ТАБЛИЧНИ БАЙТОВЕ ИЗКЛЮЧВАНЕ НА АТРИБУТИ: 1952

CONVERT SQLTERM 13 ИМАШЕ 2 СЪОБЩЕНИЯ ЗА ТАЗИ ПРОГРАМА.

CONVERT SQLTERM 14 ИМАШЕ 0 СЪОБЩЕНИЯ, ПОТИСНАТИ ОТ ОПЦИЯТА ЗА ФЛАГ.

CONVERT SQLTERM 15 272544 БАЙТА СЪХРАНЕНИЕ БЯХА ИЗПОЛЗВАНИ ОТ ПРЕДКОМПИЛАТОРА.

КОНВЕРТИРАНЕ НА SQLTERM 16 КОДЪТ ЗА ВРЪЩАНЕ Е 8

DSNTPSMP CONSOLE 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 - Връщането е завършено успешно.


person Abhinav    schedule 24.04.2013    source източник


Отговори (1)


Така че най-накрая проработи за мен с лека модификация, добавяйки решение за всеки, който може да попадне на това объркване по-късно.

Решение - Декларирайте курсора, преди да декларирате таблицата.

Единственото нещо, което все още ме обърква, е как мога да създам курсор върху обект, който дори още не съществува.

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
person Abhinav    schedule 25.04.2013