PDA

View Full Version : EOF in SQL-Prozedur sauber abfragen



WolfgangD
05-11-07, 11:55
Wie kann ich in einer SQL-Prozedur in eine Loop EOF sauber abfragen?

Zur Veranschaulichung - die Source:

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

DECLARE not_found CONDITION FOR SQLSTATE '02000';

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

DECLARE CONTINUE HANDLER FOR not_found SET at_end = 1;

OPEN C1;
FETCH_LOOP1:
LOOP
FETCH C1 INTO RTGN;

IF at_end <> 0 THEN
LEAVE fetch_loop1;
END IF;


SET p_ok = ' ';
CALL RTSMAW3(RTGN, P_OK);
IF P_OK <> ' ' THEN
LEAVE FETCH_LOOP1;
END IF;

END LOOP;

CLOSE C1;

IF P_OK <> ' ' THEN
GOTO ENDE;
END IF;

OPEN C2;
FETCH_LOOP2:
LOOP
FETCH C2 INTO RTGN;
IF at_end = 1 THEN LEAVE FETCH_LOOP2; END IF;

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: set p_ok = ' ';
END

Das Problem, dass ich dabei habe, ist, dass ich zu den roten Anweisungen genau 1x (mit dem ersten Ergebnis) hinkomme!

Was ist dabei falsch? Soll man solche Abfragen überhaupt anders gestalten - und wann ja wie?

Besten Dank

Fuerchau
05-11-07, 13:39
SQLCODE = 100 heißt das Zauberwort.
Genauso wie in embedded SQL auch.

Allerdings auch SQLCODE < 0 gehört ggf. abgefragt.