Ich habe es bei mir jetzt auch nochmal getestet und funktioniert so wie erwartet. (7.1)
Einmal mit "declare exit handler for sqlexception" und einmal ohne.
In beiden Fällen bekomme ich den SQL Fehler:
- In der standard SQLSTATE variable vom RPG
- Oder mit der Get Diagnostics Funktion
Code:
CREATE or REPLACE PROCEDURE PRANLIB.MYPROC2 (
IN PNAME VARCHAR(10) )
LANGUAGE SQL
SPECIFIC PRANLIB.MYPROC2
NOT DETERMINISTIC
MODIFIES SQL DATA
SET OPTION COMMIT = *CHG
BEGIN
DECLARE SQLCODE INT ;
DECLARE SQLSTATE CHAR ( 5 ) ;
insert into pranlib.tab1 values (1, PNAME);
END;
Code:
Exec Sql Call PRANLIB.MYPROC2('asdf');
dsply sqlstate;
Exec Sql Get Diagnostics CONDITION 1 :vsqlmsg = MESSAGE_TEXT;
dsply (%subst(vsqlmsg : 1: 20 ) );
Bei den langen SQL und kurzen SYS Namen muss man etwas aufpassen.
Da kann es passieren, dass z.B. beim CREATE OR REPLACE die alte Prozedur nicht gelöscht sondern einfach eine Neue angelegt wird.
Produktiv verwenden wir gar nicht die REPLACE Syntax sondern Löschen alle Prozeduren mit:
DROP SPECIFIC ROUTINE ...
und
DROP ROUTINE ...
... um ganz sicher zu gehen dass da nicht was vergessen wurde.
lg Andreas
Bookmarks