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