GET DIAGNOSTICS leer nach SQLCODE -803 beim Insert
- Dieses Thema hat 8 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 15 Jahre, 6 Monaten von
Anonym.
-
AuthorPosts
-
11. März 2008 um 9:27 Uhr #2837
AnonymInaktivDB2 V8 Z/OS: Ich führe ein Insert mit einem bereits existierenden Satz durch und erhalte den SQLCODE -803 (lt. SQLCA). So weit alles in Ordnung. Beim Abfragen der GET DIAGNOSTICS sind die "STATEMENT INFORMATION"-Felder und die "Condition Information" leer.
Hat jemand dieses Phänomen schon erlebt?
11. März 2008 um 11:42 Uhr #3208
AnonymInaktivHigh Georg,
was für eine Art von I NSERT ist es denn ?
I NSERT INTO … VALUES () oder
I NSERT INTO … S ELECT … oder
I NSERT INTO … FOR :n ROWS VALUES() ?Grüsse
Uli
11. März 2008 um 11:44 Uhr #3454
AnonymInaktivEs ist ein einfacher Single-Row-Insert:
EXEC SQL INSERT INTO RQSTREST
( RQREPGM
, RQRESTARTJOB
, RQRESTAT
, RQRETSAEN
, RQREKEYOK1
) VALUES
(:RQREPGM
,:RQRESTARTJOB
,:RQRESTAT
,CURRENT TIMESTAMP
,:RQREKEYOK1
);
11. März 2008 um 11:59 Uhr #3606
AnonymInaktivAlso, laut DENNE werden die condition-informations nur bei einem rowset gefüllt ( also bei I NSERT INTO … FOR :n ROWS VALUES() …)
Und wenn ich mir die Beschreibung der Parameter für die statement-information anschaue, dann passt keiner davon auf einen I NSERT VALUES() .
Welchen Wert genau wolltest Du Dir denn holen ?
Hast Du geprüft, ob der GET DIAGNOSTICS seinerseits einen negativen SQL-Code geliefert hat ?
11. März 2008 um 13:13 Uhr #3720
AnonymInaktivDa liegt DENNE falsch siehe IBM DB2 for z/OS V8 SQL Reference:
Diagnostic information is provided in three main areas: statement information, condition information, and combined information. After the execution of an SQL statement, information about the execution of the statement is provided as statement information, and at least one instance of condition information is provided. The number of instances of the condition information is indicated by the NUMBER item that is available in the statement information. Combined information contains a text representation of all the information gathered about the execution of the SQL statement.
Nach deinem INSERT statement liefert GET DIAGNOSTICS
ROW_COUNT = 0 (Anz. rows inserted)
NUMBER = 1 (Anz. Conditions)zurück. GET DIANOSTICS Aufruf mit Keyword CONDITION 1 liefert
SQLCODE : -803
SQLSTATE: 23505Achtung: Da GET DIAGNOSTICS ein ’normales‘ ausführbares SQL statement ist, wird es auch die SQLCA updaten. Will heissen, falls GET DIAGNOSTICS Aufruf funktioniert hat wird SQLCA SQLCODE = 0 beinhalten.
@Georg: Aus welchem Grund verwendest du GET DIAGNOSTICS bei deinem INSERT statement?
GET DIAGNOSTICS spielt seine Stärken primär bei multi-row processing (INSERT/UPDATE) und "when dealing with objects with long names, that potentially no longer fit into SQLCA message area" aus…
11. März 2008 um 13:40 Uhr #3794
AnonymInaktivHi hke,
im Rahmen einer allgemeinen Fehlerroutine gebe ich im Fehlerfall alle verfügbaren Informationen aus: zuerst alle wesentlichen Infos der SQLCA und anschließend alle möglichen Infos lt. GET DIANOSTICS.
Ungefähr so:
SQL-FEHLER STATEMENT: SQL INSERT RQREREST Â Â Â
SQL-FEHLER KEY……: HL030P Â / Â Â Â Â /START Â
SQLCAID………….: SQLCA Â Â Â Â Â Â Â Â Â Â
SQLCABC………….: Â Â Â Â Â Â 136 Â Â Â Â Â
SQLCODE………….: Â Â Â Â Â -803 Â Â Â Â Â
SQLERRM………….: RQSXREST 0000000201 Â Â Â
SQLERRP………….: DSNXRINS Â Â Â Â Â Â Â Â
SQLERRD(1)……….: Â Â Â Â Â -110 Â Â Â Â Â
SQLERRD(2)……….: Â Â Â 13172739 Â Â Â Â Â
SQLERRD(3)……….: Â Â Â Â Â Â Â 0 Â Â Â Â Â
SQLERRD(4)……….: Â Â Â 13817814 Â Â Â Â Â
SQLERRD(5)……….: Â Â -490143744 Â Â Â Â Â
SQLERRD(6)……….: Â Â Â Â Â Â Â 0 Â Â Â Â Â
SQLWARN0…………: Â Â Â Â Â Â Â Â Â Â Â Â Â
SQLWARN1…………: Â Â Â Â Â Â Â Â Â Â Â Â Â
SQLWARN2…………: Â Â Â Â Â Â Â Â Â Â Â Â Â
SQLWARN3…………: Â Â Â Â Â Â Â Â Â Â Â Â Â
SQLWARN4…………: Â Â Â Â Â Â Â Â Â Â Â Â Â
SQLWARN5…………: Â Â Â Â Â Â Â Â Â Â Â Â Â
SQLWARN6…………: Â Â Â Â Â Â Â Â Â Â Â Â Â
SQLWARN7…………: Â Â Â Â Â Â Â Â Â Â Â Â Â
SQLWARN8…………: Â Â Â Â Â Â Â Â Â Â Â Â Â
SQLWARN9…………: Â Â Â Â Â Â Â Â Â Â Â Â Â
SQLWARNA…………: Â Â Â Â Â Â Â Â Â Â Â Â Â
SQLSTATE…………: 23505 Â ÂErgebnis lt. Get Diagnostics:
NUMBER…………………….: Â Â Â Â Â Â Â Â Â 1 Â Â
ROW_COUNT………………….: Â Â Â Â Â Â Â Â Â 0 Â ÂWenn ich nun einen weiteren mit Get Diagnostics-Aufruf mit Keyword CONDITION 1 mache, dann erhalte ich nicht die von dir beschriebenen Ergebnisse, sondern:
CONDITION_NUMBER……………: Â Â Â Â Â Â Â Â Â 1 Â
CURSOR_NAME………………..: Â Â Â Â Â Â Â Â Â Â
DB2_ERROR_CODE1…………….: Â Â Â Â Â Â Â -110 Â
DB2_ERROR_CODE2…………….: Â Â Â Â Â Â Â Â Â 0 Â
DB2_ERROR_CODE3…………….: Â Â Â Â Â Â Â Â Â 0 Â
DB2_ERROR_CODE4…………….: Â Â Â Â Â Â Â Â Â 0 Â
DB2_INTERNAL_ERROR_POINTER…..: Â Â Â Â Â Â Â Â Â 0 Â
DB2_MESSAGE_ID……………..: Â Â Â Â Â Â Â Â Â Â
DB2_MODULE_DETECTING_ERROR…..: Â Â Â Â Â Â Â Â Â Â
DB2_REASON_CODE…………….: Â Â Â Â Â Â Â Â Â 0 Â
DB2_RETURNED_SQLCODE………..: Â Â Â Â Â Â Â Â Â 0 Â
DB2_ROW_NUMBER……………..: Â Â Â Â Â Â Â Â Â 0 Â
DB2_TOKEN_COUNT…………….: Â Â Â Â Â Â Â Â Â 0 Â
MESSAGE_TEXT……………….: Â Â Â Â Â Â Â Â Â Â
RETURNED_SQLSTATE…………..: Â Â Â Â Â Â Â Â Â Â
SERVER_NAME………………..:          Âund das war es, was mich verblüfft hat.
Verliert das Get Diagnostics die Infos in diesem speziellen Falle nach dem ersten Get Dia…? Oder mach ich da in der Reihenfolge etwas falsch?
12. März 2008 um 7:38 Uhr #3844
AnonymInaktivDas Problem scheint in einem bei uns nicht eingespielten PTF zu liegen bzw. noch bei IBM in Bearbeitung. Hier eine IBM-Antwort aus einem anderen Forum:
There’s loads of APARs for GET DIAGNOSTICS on R810. Open APAR PK62521
could be your problem.Call your local IBM support centre and open a new PMR. We need to take a
deeper look at your problem.
13. März 2008 um 12:57 Uhr #3877
AnonymInaktivPK62521 beschreibt ein anderes Problem "GET DIAGNOSTICS AFTER FETCH PRIOR ROWSET STATEMENT ISSUE A ROW_COUNT OF ZERO". Habe die APARS kurz durchgeschaut, jedoch keinen gefunden, welcher auf dein Problem zutrifft. Bei GET DIAGNOSTICS mit Keyword ALL gab es div. Probleme…
Reicht dir DSNTIAR als Error Reporting Routine nicht aus?
GET DIAGNOSTICS wird dir in den meisten Fällen nicht wirklich mehr Infos geben als du bereits in SQLCA hast…
13. März 2008 um 14:48 Uhr #3901
AnonymInaktivEs ist halt einfach so, daß GET DIAGNOSTICS als neue Möglichkeit für die Fehlerbehandlung mit V8 angepriesen wurde. Speziell bei Rowset-Verarbeitung ist GET DIAGNOSTICS für die Abfrage von Fehlern in den Handbüchern aufgeführt.
Da wir zusätzlich eine einzige standardisierte Fehlerroutine verwenden wollen, haben wir neben der Ausgabe der SQLCA-Daten auch auf die GET DIAGNOSTICS-Daten zurückgreifen.
Wenn das nicht immer funktioniert, so sehe ich das halt als ungetestetes Feature (nicht als Bug  🙂 ) an und hoffe, daß mit irgend einem PTF oder der nächsten Version die Unschönheit auch behoben ist.
-
AuthorPosts
You must be logged in to reply to this topic.