Anfang des Inhaltsbereichs

 Array-Anweisung 

Verwendung

Um mit einer einzigen eingebetteten SQL-Anweisung mehr als einen Datensatz einer Datenbanktabelle zu lesen oder zu verändern, verwenden Sie eine Array-Anweisung. Eine Array-Anweisung führt eine SQL-Anweisung in einer Schleife mehrfach aus und wendet dabei jedes Array-Element als Parameter auf eine Zeile der Datenbanktabelle an.

Um eine Array-Anweisung zu formulieren, haben Sie folgende Möglichkeiten:

·       Sie übergeben alle Parameter in einer statischen SQL-Anweisung mit Arrays als Host-Variablen.

·       Sie verwenden in einer dynamische SQL-Anweisung die FOR-Klausel in Verbindung mit einem Deskriptor und Array-Programmvariablen

Syntax

EXEC SQL [<session_spec>] [FOR <loop_parameter>] <sql_statement>;

·       Geben Sie <session_spec> an, wenn Sie mit mehreren Datenbanksitzungen arbeiten.

·       Der Wert von <loop_parameter> bestimmt den Wiederholungsfaktor für die Ausführung der Schleife. Falls die Array-Variable mehr oder weniger Komponenten hat als im <loop_parameter> angegeben, erhalten Sie beim Precompiler-Lauf eine Warnung im Precompiler-Protokoll und die Anweisung wird mit der kleinsten Dimension ausgeführt. Dies gilt auch, wenn Sie mehrere Array-Variablen verwenden, die nicht die gleiche Anzahl von Elementen haben.

Treten bei der Verarbeitung einer Array-Anweisung im Datenbankkern Fehler auf, so wird die Verarbeitung abgebrochen und die Anzahl der erfolgreich verarbeiteten Sätze in der Struktur sqlca unter sqlerrd[2] eingetragen.

Die SQL-Anweisung SELECT INTO ist für Array-Anweisungen im SQL-Modus INTERNAL nicht zulässig.

Beispiel

Beispiel für eine statische Array-Anweisung:

/* Array Insert */

EXEC SQL BEGIN DECLARE SECTION;

int hnr[3];

int plz[3];

float preis[3];

char *name[3], *ort[3];

EXEC SQL END DECLARE SECTION;

hnr[0]   = 10;

name[0]  = "Excelsior";

plz[0]   = 89073;

ort[0]   = "Ulm";

preis[0] = 135.00;

hnr[1]   = 30;

name[1]  = "Flora";

plz[1]   = 48159;

ort[1]   = "Münster";

preis[1] = 45.00;

hnr[2]   = 20;

name[2]  = "Berlin";

plz[2]   = 86165;

ort[2]   = "Augsburg";

preis[2] = 70.00;

EXEC SQL INSERT INTO HOTEL VALUES (:hnr, :name, :plz, :ort, :preis);

Ende des Inhaltsbereichs