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
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 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);