PDA

View Full Version : Stored Procedure SQLSTATE 428B3



mk
10-12-14, 13:54
Hallo zusammen,

ich habe bei dem Aufruf einer Stored Procedure folgende Anweisungen

if ( aDbaction <> 'D' and
aDbaction <> 'I' and
aDbaction <> 'C' and
aDbaction <> 'U' ) Then

SET FEHLERCODE = '99995' ;
set Fehlertext =
'aDbAction code ist ungültig nur I, U, D, C erlaubt' ;
-- SIGNAL SQLSTATE FEHLERCODE SET MESSAGE_TEXT = FEHLERTEXT ;
SIGNAL SQLSTATE '99995' SET MESSAGE_TEXT = FEHLERTEXT ;
Return -1;
End if ;

Eigentlich müsste im RPG Programm in der
SQLCA Datenstruktur die Variable
SQLERM OF SQLCA mit der Fehlermeldung
und die Variable SQLSTATE mit dem Wert 99995 gefüllt sein.

Leider steht in der Varaible SQLERM OF SQLCA =

....5...10...15...20...25...30...35...40...45...50 ...55...60

1 ' 00000 '

61 ' '

und in der Variable

SQLSTATE OF SQLCA = '428B3'

Im Joblog stehen noch diese Info's

Nachricht aDbAction code ist ungültig nur I, U, D, C erlaubt wurde von

SIGNAL, RESIGNAL oder RAISE_ERROR zurückgegeben.

Anweisung GET DIAGNOSTICS beendet.

Anweisung SET beendet.

SQLSTATE-Wert 00000 ist nicht gültig.

SQLSTATE-Wert 00000 ist nicht gültig.

4>> dspjoblog


Der SQLCODE = -435 der angezeigt wird bedeutet das der WERT '00000' für SQLSTATE ungültig ist.

Hat jemand eine Idee ?

Könnte es ein PTF Problem sein ?

Gruß
Michael

Fuerchau
10-12-14, 14:58
Du kannst dir nicht einfach irgendeinen SQLSTATE ausdenken, hier gibt es Regeln (siehe Handbücher).
Probier doch einfach mal den Beispielcode aus:

EXEC SQL SIGNAL SQLSTATE '75002' SET MESSAGE_TEXT = 'Customer number is not known';

mk
10-12-14, 15:14
Hi Baldur,

dein Beispiel ist auch ein selbst definierter SQLSTATE. Wir haben hier einige SP die dieses Verfahren
verwenden. Bisher gab es damit kein Problem .

Gruß
Michael

BenderD
10-12-14, 15:23
... nach ANSI würde da SQLSTATE '22023' passen, wobei mich die Pingeligkeit schon wundert, normalerweise orientiert sich DB2/400 ausschließlich am SQLCODE und schwindelt sich da auch schon mal den ihrer Meinung nach passenden SQLSTATE hinzu, nachdem sie das Original weggeworfen hat. Und was so diverse Datenbanken alles an SQLSTATEs werfen, das spricht jedem Standard Hohn.

D*B

mk
10-12-14, 15:31
Hi,

ich habe jetzt einfach mal folgende Zeile eingebaut
SIGNAL SQLSTATE '22504' SET MESSAGE_TEXT = FEHLERTEXT ;

Hat aber absolut keine Änderung gebracht.

Mich wundern besonders die Meldungen im Joblog:
SQLSTATE-Wert 00000 ist nicht gültig.

SQLSTATE-Wert 00000 ist nicht gültig.

Ich habe keine Ahnung wo die herkommen.