sqlLib.sqlData (EGL-Systemvariable)

Die Systemvariable 'sqlData' ist ein strukturierter Datensatz, der eine Reihe von global verfügbaren Feldern enthält. Der Datensatz hat die folgende Struktur:
record sqlData type basicRecord
  10 sqlca hex(272);
    20 * hex(24);
    20 sqlcode int;
    20 * hex(4);
    20 sqlerrmc char(70);
    20 * hex(16);
    20 sqlerrd int[6];
	  20 sqlwarn char(1)[11];
    20 sqlstate char(5);
end

Dieselben Variablen befinden sich auch an ihrer vorherigen Position in der Bibliothek 'sysVar'. Der Gültigkeitsbereich der Variablen in 'sysVar' ist jedoch auf das aktuelle Programm begrenzt. Beispiel: Wenn 'Programm B' von 'Programm A' aufgerufen wird und beide Programme auf eine relationale Datenbank zugreifen, verfügt jedes Programm über eine eigene Kopie von 'sysVar.sqlData'. Die in 'Programm B' gesetzten Werte sind nach Rückkehr zu 'Programm A' nicht mehr verfügbar. Aus diesem Grund müssen Sie den Namen jeder dieser Variablen, die Sie verwenden, vollständig qualifizieren. Beispiel: sqlLib.sqlData.sqlcode.

Der Datensatz enthält die folgenden Einzelfelder:
sqlcode
Enthält einen Statuscode, nachdem Ihr Programm auf eine relationale Datenbank zugegriffen hat.
sqlerrmc
Die zu 'sqlcode' zugeordnete Fehlernachricht.
sqlerrd
Diese sechs Variablen des Typs INT stellen die folgenden Diagnoseinformationen bereit:
sqlerrd[1]
Wenn die SQL-Verbindung erfolgreich aufgerufen wird, enthält diese Variable die maximale erwartete Differenz bei der Länge gemischter Zeichendaten (CHAR-Datentypen), wenn eine Konvertierung aus der Anwendungscodepage in die Datenbankcodepage erfolgt. Der Wert 0 oder 1 weist darauf hin, dass keine Verlängerung auftritt. Ein Wert größer als 1 gibt an, dass eine Verlängerung möglich ist. Ein negativer Wert gibt eine mögliche Verkürzung der Zeichenfolge an. Bei einer erfolgreichen Rückkehr von einer SQL-Prozedur enthält die Variable den Rückgabestatuswert von der SQL-Prozedur.
sqlerrd[2]
Wenn die SQL-Verbindung erfolgreich aufgerufen wird, enthält diese Variable die maximale erwartete Differenz bei der Länge gemischter Zeichendaten (CHAR-Datentypen), wenn eine Konvertierung aus der Datenbankcodepage in die Anwendungscodepage erfolgt. Der Wert 0 oder 1 weist darauf hin, dass keine Verlängerung auftritt. Ein Wert größer als 1 gibt an, dass eine Verlängerung möglich ist. Ein negativer Wert gibt eine mögliche Verkürzung der Zeichenfolge an. Wenn der SQL-Kommunikationsbereich (SQLCA) aus einer nicht ganzheitlichen (NOT ATOMIC) Compound-SQL-Anweisung resultiert, die einen oder mehrere Fehler festgestellt hat, wird der Wert auf die Anzahl der Anweisungen gesetzt, die fehlgeschlagen sind.
sqlerrd[3]
Wenn PREPARE erfolgreich aufgerufen wird, enthält dieses Feld (bzw. dieses Element in der Feldgruppe) eine Schätzung der Anzahl der zurückgegebenen Zeilen. Nach INSERT, UPDATE, DELETE oder MERGE ist die tatsächliche Anzahl der Zeilen enthalten, die für die Operation qualifiziert sind. Wird eine Compound-SQL-Anweisung aufgerufen, enthält sie die Summe aller Zeilen in Unteranweisungen. Wird CONNECT aufgerufen, ist der Wert 1 enthalten, wenn die Datenbank aktualisiert werden kann, bzw. der Wert 2, wenn die Datenbank schreibgeschützt ist.
Wenn die Anweisung OPEN aufgerufen wird und der Cursor SQL-Datenänderungsanweisungen enthält, dann enthält dieses Feld die Summer der Zeilen, die für die eingebetteten Operationen für Einfügen (INSERT), Aktualisieren (UPDATE), Löschen (DELETE) oder Mischen (MERGE) qualifiziert sind.
Wenn CREATE PROCEDURE für eine SQL-Prozedur aufgerufen wird und bei der Syntaxanalyse des SQL-Prozedurhauptteils ein Fehler festgestellt wird, ist die Nummer der Zeile enthalten, in der der Fehler auftrat. Das sechste Byte von SQLCA muss 'L' sein, damit diese Zeilennummer gültig ist.
sqlerrd[4]
Wenn PREPARE erfolgreich aufgerufen wird, enthält dieses Feld eine relative Kostenschätzung im Hinblick auf die Ressourcen, die für die Verarbeitung der Anweisung erforderlich sind. Wird eine Compound-SQL-Anweisung aufgerufen, ist die Anzahl der erfolgreichen erfolgreichen Unteranweisungen enthalten. Wird CONNECT aufgerufen, ist einer der folgenden Codes enthalten:
  • 0 für ein einphasiges Commit von einem zurückgestuften Client.
  • 1 für ein einphasiges Commit.
  • 2 für ein einphasiges, schreibgeschütztes Commit.
  • 3 für ein zweiphasiges Commit.
sqlerrd[5]
Enthält die Gesamtzahl der gelöschten, eingefügten oder aktualisierten Zeilen als Ergebnis der beiden folgenden Aktionen:
  • Der Umsetzung von Integritätsbedingungen nach einer erfolgreichen Löschoperation.
  • Der Verarbeitung ausgelöster SQL-Anweisungen über einen aktivierten Trigger.
Wenn eine Compound-SQL-Anweisung aufgerufen wird, enthält dieses Feld (bzw. dieses Element in der Feldgruppe) die Summe solcher Zeilen für alle Unteranweisungen. Wenn ein Fehler festgestellt wird, enthält dieses Feld in einigen Fällen einen negativen Wert, der einen Zeiger für einen internen Fehler darstellt.
Wird CONNECT aufgerufen, enthält 'sqlerrd[5]' einen der folgenden Werte für den Authentifizierungstyp:
0
Serverauthentifizierung
1
Clientauthentifizierung
2
Authentifizierung mithilfe von DB2 Connect
4
SERVER_ENCRYPT-Authentifizierung
5
Authentifizierung mithilfe von DB2 Connect mit Verschlüsselung
7
KERBEROS-Authentifizierung
8
KRB_SERVER_ENCRYPT-Authentifizierung
9
GSSPLUGIN-Authentifizierung
10
GSS_SERVER_ENCRYPT-Authentifizierung
255
Nicht angegebene Authentifizierung
sqlerrd[6]
Bei einer partitionierten Datenbank ist die Nummer der Partition enthalten, in der der Fehler oder die Warnung festgestellt wurde. Wurden keine Fehler oder Warnungen festgestellt, enthält dieses Feld die Partitionsnummer des Koordinatorknotens. Die Nummer in diesem Feld ist mit der Nummer identisch, die für die Partition in der Datei 'db2nodes.cfg' angegeben wurde.
sqlwarn
Eine Gruppe aus 11 Warnungsanzeigern. Wird eine Compound-SQL-Anweisung aufgerufen, enthält jeder Anzeiger eine Summierung der für alle Unteranweisungen gesetzten Warnungsanzeiger. Diese Feldgruppe enthält die folgenden Anzeiger:
sqlwarn[1]
Enthält einen der folgenden Werte:
[leer]
Alle anderen Anzeiger sind leer.
W
Mindestens ein weiterer Anzeiger ist nicht leer.
sqlwarn[2]
Enthält einen der folgenden Werte:
A
Die Anweisung CONNECT oder ATTACH war erfolgreich, und der Autorisierungsname für die Verbindung ist länger als 8 Byte.
N
Das Nullabschlusszeichen wurde abgeschnitten.
P
Die in 'sqlerrd[4]' gespeicherte relative Kostenschätzung für die Anweisung PREPARE hat entweder den Wert überschritten, der in einer ganzen Zahl (INTEGER) gespeichert werden kann, oder war kleiner als 1, und entweder das Sonderregister CURRENT EXPLAIN MODE oder CURRENT EXPLAIN SNAPSHOT ist auf einen anderen Wert als NO gesetzt.
W
Der Wert einer Zeichenfolgespalte wurde bei der Zuordnung zu einer Hostvariablen abgeschnitten.
sqlwarn[3]
Enthält den Wert W, wenn Nullwerte aus dem Argument einer Funktion entfernt wurden. Der Wert W ist auch dann enthalten, wenn die letzte SQL-E/A-Operation den Datenbankmanager veranlasst hat, Zeichendatenfelder aufgrund von Speichermangel in den Hostvariablen für das Programm abzuschneiden. Mit logischen Ausdrücken können Sie testen, ob die Werte bestimmter Hostvariablen abgeschnitten wurden. Weitere Informationen finden Sie in den Referenzen auf 'trunc' im Abschnitt 'Logische Ausdrücke für SQL-Datensätze'.
Wenn die Hostvariable eine Zahl ist, wird bei einer Abschneidung keine Warnung ausgegeben. Bruchteile einer Zahl werden ohne Meldung abgeschnitten. Wenn Sie eine DB2-Datenbank verwenden, gibt der Datenbankmanager '-304' in 'sqlcode' zurück, wenn der ganzzahlige Teil einer Zahl (nicht der Bruchteil) von der Größe her nicht in eine Benutzervariable passt.
sqlwarn[4]
Enthält einen der folgenden Werte:
W
Die Anzahl der Spalten ist ungleich der Anzahl der Hostvariablen.
Z
Die Anzahl der in der Anweisung ASSOCIATE LOCATORS angegebenen Zeigerwerte für Ergebnismengen ist kleiner als die Anzahl der von einer Prozedur zurückgegebenen Ergebnismengen.
sqlwarn[5]
Enthält den Wert W, wenn eine vorbereitete Anweisung UPDATE oder DELETE keine WHERE-Klausel enthält.
sqlwarn[6]
Für zukünftige Verwendung reserviert.
sqlwarn[7]
Enthält den Wert W, wenn das Ergebnis einer Datumsberechnung zwecks Vermeidung eines nicht möglichen Datums angepasst wurde.
sqlwarn[8]
Wenn CONNECT erfolgreich aufgerufen wird, ist der Wert E enthalten, wenn der Datenbankkonfigurationsparameter DYN_QUERY_MGMT aktiviert ist. Wenn Sie eine DB2-Datenbank verwenden, enthält dieses Feld (oder dieses Element in der Feldgruppe) den Wert W, wenn eine Anpassung vorgenommen wurde, um ein ungültiges Ergebnis einer Rechenoperation für Datums- oder Zeitwerte zu korrigieren.
sqlwarn[9]
Enthält den Wert W, wenn ein Zeichen, das nicht konvertiert werden konnte, durch ein Substitutionszeichen ersetzt wurde.
sqlwarn[10]
Enthält den Wert W, wenn arithmetische Ausdrücke mit Fehlern während der Verarbeitung von Spaltenfunktionen ignoriert wurden.
sqlwarn[11]
Enthält den Wert W, wenn ein Konvertierungsfehler bei der Konvertierung eines Zeichendatenwerts in einem der Felder im SQL-Kommunikationsbereich auftrat.
sqlstate
Ein Rückgabecode, der das Ergebnis der jüngsten SQL-Anweisung angibt.

Wert übergreifend für Anweisung 'converse' im Segmentmodus speichern?

NEIN

Kompatibilität

Tabelle 1. Hinweise zur Kompatibilität für 'sqlData'
Plattform Problem
COBOL-Generierung 'sqlLib.sqlData' wird nicht unterstützt.
Java™-Generierung Java setzt lediglich 'sqlcode', 'sqlstate', 'sqlerrd[2]', 'sqlerrd[3]' und 'sqlwarn[2]'. In Java wird die Datenstruktur des SQL-Kommunikationsbereichs (SQLCA) nicht bei jeder E/A-Operation an die Datenbank bzw. aus der Datenbank übergeben, sodass EGL alle Felder setzt, die möglich sind. Der Benutzer kann zwar weitere Felder ändern, doch werden diese von EGL-Java nicht verwendet.

Feedback