Hello all,

In our production system we use version 7.5.0.19.
Same days ago I made an update of my development system to 7.6.0.32.
Now I got a problem with a procedure.
The procedure returns a cursor. 
If no data are returned on 7.5.0.19 I get the message “No result”,
on 7.6.0.32 “General error;-4024 POS(1) “ is produced.

I can avoid the error by making a better (safer) code as shown in the
following text. 
But it is a hard work tosearch through all procedures and triggers for
a similar problem.

Elke

CREATE DBPROC PROC_DBV_SCHULEN (IN PNR INT) RETURNS CURSOR AS
VAR BEG1 DATE; END1 DATE; ID1 INT; BEG2 DATE; END2 DATE; ID2 INT;

TRY
        DELETE FROM TEMP.DBV_SCHULEN;
CATCH
        CREATE  TABLE TEMP.DBV_SCHULEN (BEGINN DATE, ENDE DATE, SCHUL_ID
INT);

/* If temporary table is empty after this select, the error *4024 is
produced
To avoid it I added try-cath */
TRY 
     INSERT INTO TEMP.DBV_SCHULEN
     SELECT BEGINN, ENDE, SCHUL_ID FROM DBA.T_DBV 
     WHERE PERS_NR = :PNR;
CATCH 
        DECLARE :$CURSOR CURSOR FOR 
        SELECT 'keine' AS Schule FROM SYSDBA.DUAL;

DECLARE CC CURSOR 
FOR SELECT * FROM TEMP.DBV_SCHULEN
ORDER BY BEGINN FOR REUSE;

FETCH CC INTO :BEG1, :END1, :ID1;
WHILE $RC = 0 DO
BEGIN 
        FETCH CC  INTO :BEG2, :END2, :ID2;
        IF $RC = 100 THEN
        BREAK;

        IF ID1 = ID2 AND ADDDATE(END1,1) = BEG2 THEN 
        BEGIN
                UPDATE TEMP.DBV_SCHULEN 
                SET ENDE = :END2 WHERE SCHUL_ID = :ID1 AND ENDE =
:END1;
                DELETE FROM TEMP.DBV_SCHULEN 
                WHERE SCHUL_ID = :ID1 AND BEGINN = :BEG2;
        END;
        SET BEG1 = BEG2;
        SET END1= END2;
        SET ID1=ID2;
END;

DECLARE :$CURSOR CURSOR FOR 
SELECT BEGINN, ENDE, CHR(SCHUL_NR,6)&', '&SCHULNAME&' '&ORT& ' ' & 
        DECODE (CASE WHEN SCHLIESSDATUM ='2099-12-31' THEN NULL 
        ELSE SCHLIESSDATUM END , NULL , ' ',
        '(Schließung:'&CHR(DAY(SCHLIESSDATUM
))&'.'&CHR(MONTH(SCHLIESSDATUM ))&'.'&CHR(YEAR(SCHLIESSDATUM ))&')') 
        AS SCHULE
FROM TEMP.DBV_SCHULEN, DBA.T_SCHULE
WHERE TEMP.DBV_SCHULEN.SCHUL_ID = T_SCHULE.SCHUL_ID
ORDER BY BEGINN DESC;





--
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to