2014-10-01 2 views
0

Я нашел "DECLARE CURSOR" Заявление на WWW:DB2 - Объявить курсор в хранимой процедуре

CREATE OR REPLACE PROCEDURE "APART21C"."FIND_VALID_ARZTNRN" 
(OUT NoOfRows BIGINT) 
RESULT SETS 1 
LANGUAGE SQL 
SPECIFIC SQL140905135133600 
BEGIN 

    DECLARE myARZTNR CHAR(7); 
    DECLARE END_TABLE INT DEFAULT 0 
    ; 
    DELETE FROM APART21C.TMP_LANR07_CHECK 
    ; 
    DECLARE C1 CURSOR FOR 
    SELECT DISTINCT Arztnr 
    FROM APART21C.DMP_LEV_TMP 
    ; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND 
    SET END_TABLE = 1 
    ; 
    OPEN C1 
    ; 
    FETCH C1 INTO myARZTNR 
    ; 
    WHILE END_TABLE = 0 DO 

     INSERT INTO APART21C.TMP_LANR07_CHECK 
     SELECT * FROM TABLE(APART21C.CHECK_ARZTNR_BY_CHECKSUM(myARZTNR)) AS ARZTNRCHECK; 
     SET NoOfRows = NoOfRows + 1; 

     FETCH C1 INTO myARZTNR; 

    END WHILE 
    ; 
    CLOSE C1 
    ; 
END 

ErrorMessage является

"DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=<cursor declaration>;;<SQL statement>" 

Нужна ваша помощь, пожалуйста

Я m новичок db2, у меня больше опыта работы с MS SQL Server. Оператор "SELECT * FROM TABLE (..." вызывает функцию которым возвращает таблицу. Р.

+0

Все инструкции 'DECLARE' в составном SQL должны появляться _before_ любые исполняемые операторы, такие как' DELETE'. Найдите «составной SQL» в руководстве для вашей версии DB2. – mustaccio

+0

И в чем ваш вопрос? – user2338816

+0

** @ user2338816 **: Вопрос _WHY ЭТО ОШИБКА ОТОБРАЖАЕТСЯ? _ (Это легко божественно :) – RobertJ

ответ

0

Проблема с кодом ниже

DECLARE C1 CURSOR FOR SELECT DISTINCT Arztnr ОТ APART21C.DMP_LEV_TMP

Я изменился, как показано ниже, и он выполнен

DECLARE C1 курсор с Задержитесь на SELECT, Arztnr ОТ DMP_LEV_TMP;

Смежные вопросы