PDA

View Full Version : SQL-Prozedur lässt sich nicht erstellen



WolfgangD
31-10-07, 16:29
Hallo Leute

Ich habe versucht eine SQL-Prozedur zu erstellen, stoße dabei allerdings auf Probleme:

Bei folgender Prozedur

CREATE PROCEDURE MASSWART
LANGUAGE SQL
BEGIN
DECLARE RTGN CHAR(18);
DECLARE P_OK CHAR(1);
DECLARE P_RETURN CHAR(7);

DECLARE C1 CURSOR FOR SELECT DISTINCT RTGNRB FROM RTGPF0RB WHERE RTGTRB = 'V' AND TNOCRB = '1434096' AND RTGNRB LIKE '0A159%' ;

OPEN C1;
FETCH_LOOP1:
LOOP
FETCH C1 INTO RTGN;
IF RTGN IS NULL THEN
LEAVE FETCH_LOOP1;
END IF;
CALL RTSMAW3(RTGN, P_OK);
IF P_OK <> ' ' THEN
LEAVE FETCH_LOOP1;

END IF;
END LOOP
FETCH_LOOP1;
CLOSE C1;

IF P_OK <> ' ' THEN
GOTO ENDE;

END IF;

DECLARE C2 CURSOR FOR SELECT DISTINCT RTGNRB FROM RTGPF0RB WHERE RTGTRB = 'V' AND TNOCRB = '1434096' AND RTGNRB LIKE '0A159%' ;
OPEN
C2;
FETCH_LOOP2:
LOOP
FETCH C2 INTO RTGN;
IF RTGN IS NULL THEN
LEAVE FETCH_LOOP2;
END IF;

CALL RTSPGASX('AT', 'AT', 'AT', RTGN, '*READ', ' ', ' ', P_RETURN);
UPDATE RTSPFASW SET TNOCRW = '1434124' WHERE RTGNRW = RTGN AND TNOCRW = '1434096';
CALL RTSPGASX('AT', 'AT', 'AT', RTGN, '*UPDATE', ' ', ' ', P_RETURN);

END LOOP
FETCH_LOOP2;
CLOSE C2;

ENDE:

wird mir im OPSNAV immer folgender Fehler angezeigt

SQL-Status: 42601
Vendorencode: -104
Nachricht: [SQL0104] Token C2 ungültig. Gültige Token: GLOBAL. Ursache . . . . : Bei Token C2 wurde ein Syntaxfehler entdeckt. Token C2 ist kein gültiges Token. GLOBAL ist eine Teilliste gültiger Token. Diese Liste geht davon aus, dass die Anweisung bis zu diesem Token korrekt ist. Es kann eine frühere Stelle in der Anweisung fehlerhaft sein, aber bis zu dieser Stelle scheint die Syntax gültig zu sein. Fehlerbeseitigung: Einen der folgenden Schritte durchführen und die Anforderung wiederholen: - SQL-Anweisung im Bereich des Token C2 überprüfen. Anweisung korrigieren. Der Fehler kann ein fehlendes Komma oder Anführungszeichen sein, er kann in einem falsch geschriebenen Wort oder in der Anordnung der Klauseln begründet sein. - Ist das fehlerhafte Token <ANWEISUNGSENDE>, die Anweisung korrigieren, da sie mit einer ungültigen Klausel endet.
Verarbeitung wurde beendet, da die hervorgehobene Anweisung nicht erfolgreich abgeschlossen werden konnte

Dabei wird die Anweisung "DECLARE C2 ..." angemeckert - ich kann allerdings beim besten Willen keinen Fehler feststellen!

Was übersehe ich dabei?

B.Hauser
31-10-07, 16:52
Hallo,

bei einer Stored Procedure, einer User Defined Function und einem SQL Trigger, müssen alle Declare-Anweisungen zu Beginn der Prozedur erfolgen, also unmittelbar nach dem Begin-Statement.

Die zweite Declare Cursor Anweisung muss also unmittel bar nach der ersten Declare Cursor Anweisung erfolgen und nicht irgendwo mittendrin.

Birgitta

WolfgangD
31-10-07, 17:13
Besten Dank für die schnelle Antwort!