Mit der OPEN CURSOR-Anweisung können Sie eine dynamische SQL-Anweisung mit Parametern ausführen und dabei eine benannte Ergebnistabelle (Cursor) erzeugen.
· Sie haben die SQL-Anweisung mit der PREPARE-Anweisung zur Ausführung vorbereitet.
· Falls Sie einen Deskriptor verwenden, haben Sie ihn mit der DESCRIBE-Anweisung initialisiert.
· Sie haben den Cursor, also die benannte Ergebnistabelle, zuvor mit einer DECLARE CURSOR-Anweisung definiert.
EXEC SQL [<session_spec>] [<for_clause>] OPEN
<cursor_name>
[
USING <parameter_list>
|
USING DESCRIPTOR [<descriptor name>] [KEEP]
|
INTO <parameter_list>
|
INTO DESCRIPTOR [<descriptor name>] [KEEP]]
· Den Ergebnistabellennamen <cursor_name> in der OPEN CURSOR-Anweisung können Sie in einer Host-Variablen übergeben, wenn sie zum Programmierzeitpunkt nicht wissen, wie viele unterschiedliche Ergebnistabellen ihr Anwendungsprogramm verarbeiten wird.
· Geben Sie KEEP an, wenn auf die OPEN CURSOR-Anweisung PUTVAL-Anweisungen folgen sollen.
· Die INTO-Angabe hat hier dieselbe Bedeutung wie die Angabe von USING <parameter_list> und dient der Kompatibilität zu anderen Datenbanksystemen.
EXEC SQL BEGIN DECLARE SECTION;
int hnr;
char name[16];
float preis;
char cmd [100];
char *stmt;
char *cursor;
EXEC SQL END DECLARE SECTION;
strcpy (cmd, "INSERT (INTO???) hotel VALUES(10, 'Excelsior', \
79000, 'Ulm', 135.00)");
EXEC SQL PREPARE STMT1 FROM :cmd;
EXEC SQL DECLARE cur1 CURSOR FOR STMT1;
EXEC SQL OPEN cur1;
hnr = 10;
strcpy (cmd, "SELECT name, preis FROM hotel WHERE hnr=?");
stmt = "STMT2";
EXEC SQL PREPARE :stmt FROM :cmd;
cursor = "cur2";
EXEC SQL DECLARE :cursor CURSOR FOR :stmt;
EXEC SQL OPEN :cursor USING :hnr;
EXEC SQL FETCH :cursor INTO :name, :preis;