Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (E-O)

 

OPEN-Anweisung [ESQL] [SP]

Mit dieser Anweisung öffnen Sie einen zuvor deklarierten Cursor, um auf Informationen der Datenbank zuzugreifen.

Syntax
OPEN Cursorname
[ USING { DESCRIPTOR SQLDA-Name | Hostvariable, ... } ]
[ WITH HOLD ]
[ ISOLATION LEVEL n ]
[ BLOCK n ]
Cursorname : Bezeichner oder Hostvariable
SQLDA-Name : Bezeichner
Parameter
  • USING DESCRIPTOR-Klausel   Die Klausel USING DESCRIPTOR gilt nur für Embedded SQL. Sie gibt die Hostvariablen an, die an die Platzhalter-Indikatorvariablen in der SELECT-Anweisung gebunden sind, für die der Cursor deklariert wurde.

  • WITH HOLD-Klausel   Standardmäßig werden alle Cursor automatisch bei Abschluss der aktuellen Transaktion (COMMIT oder ROLLBACK) geschlossen. Wenn die optionale WITH HOLD-Klausel angegeben wurde, dann wird der Cursor für nachfolgende Transaktionen offen gehalten. Der Cursor bleibt bis zum Ende der aktuellen Verbindung oder bis zu einer expliziten CLOSE-Anweisung geöffnet. Cursor werden automatisch geschlossen, wenn die Verbindung zur Datenbank geschlossen wird.

  • ISOLATION LEVEL-Klausel   Mit der ISOLATION LEVEL-Klausel kann dieser Cursor auf einer anderen Isolationsstufe geöffnet werden als der, die durch die Option isolation_level zurzeit festgelegt ist. Alle Vorgänge dieses Cursors werden ungeachtet der Optionseinstellung auf der angegebenen Isolationsstufe ausgeführt. Wenn diese Klausel nicht angegeben ist, dann entspricht die Isolationsstufe des Cursors während der gesamten Zeit, die der Cursor geöffnet ist, dem Wert der Option isolation_level, der eingestellt war, als der Cursor geöffnet wurde. Weitere Hinweise finden Sie unter Funktionsweise von Sperren.

    Folgende Werte werden unterstützt:

    • 0
    • 1
    • 2
    • 3
    • snapshot
    • statement snapshot
    • readonly statement snapshot

    Der Cursor ist vor der ersten Zeile positioniert (siehe Cursor in Embedded SQL verwenden oder Cursor in Prozeduren und Triggern verwenden).

  • BLOCK-Klausel   Diese Klausel kann nur in Embedded SQL verwendet werden. Eine Clientanwendung kann mehr als eine Zeile gleichzeitig abrufen. Dies wird Blockabruf, Prefetch-Vorgang oder Mehrzeilenabruf genannt. Die BLOCK-Klausel kann die Anzahl von Prefetch-Zeilen verringern. Die Angabe der BLOCK-Klausel in OPEN ist dasselbe wie ein Angeben der BLOCK-Klausel in jedem FETCH. Weitere Hinweise finden Sie unter FETCH-Anweisung [ESQL] [SP].

Bemerkungen

Die OPEN-Anweisung öffnet den Cursor mit dem angegebenen Namen. Der Cursor muss zuvor deklariert worden sein.

Ist der Cursor für eine CALL-Anweisung geöffnet, dann führt OPEN dazu, dass die Prozedur solange abgearbeitet wird, bis die erste Ergebnismenge angetroffen wird (bei einer SELECT-Anweisung ohne INTO-Klausel). Wenn die Prozedur abgearbeitet ist und keine Ergebnismenge ermittelt wurde, wird die Warnung SQLSTATE_PROCEDURE_COMPLETE gesetzt.

Verwendung in Embedded SQL: Nach der erfolgreichen Ausführung der OPEN-Anweisung wird das Feld sqlerrd[3] des SQLCA (SQLIOESTIMATE) mit einer geschätzten Anzahl der Eingabe/Ausgabevorgänge gefüllt, die notwendig sind, um alle Zeilen der Abfrage abzurufen. Außerdem wird in das Feld sqlerrd[2] des SQLCA (SQLCOUNT) die tatsächliche Anzahl der Zeilen im Cursor (ein Wert größer oder gleich 0) oder eine Schätzung hiervon (eine negative Zahl, deren absoluter Wert eine Schätzung ist) eingetragen. Es wird sich um die tatsächliche Anzahl der Zeilen handeln, wenn der Datenbankserver sie errechnen kann, ohne die Zeilen zu zählen. Die Datenbank kann ebenfalls so konfiguriert werden, dass sie immer die tatsächliche Anzahl der Zeilen liefert (siehe row_counts-Option [Datenbank]), was jedoch sehr kostenträchtig sein kann. Wenn der Cursorname von einem Bezeichner oder einer Zeichenfolge angegeben wird, muss die entsprechende DECLARE CURSOR-Anweisung im C-Programm vor der OPEN-Anweisung stehen. Wenn der Cursorname von einer Hostvariablen angegeben wird, muss die DECLARE CURSOR-Anweisung vor der OPEN-Anweisung ausgeführt werden.

Berechtigungen

Für alle in der SELECT-Anweisung referenzierten Tabellen ist SELECT-Berechtigung erforderlich. Für alle Prozeduren in einer CALL-Anweisung ist EXECUTE-Berechtigung erforderlich.

Nebenwirkungen

Keine.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Die Verwendung von Embedded SQL ist eine Kernfunktion. Der Einsatz der Prozedur ist eine Persistent Stored Modules-Funktion.

Beispiel

Die folgenden Beispiele zeigen, wie OPEN in Embedded SQL verwendet wird.

EXEC SQL OPEN employee_cursor;

und

EXEC SQL PREPARE emp_stat FROM
'SELECT empnum, empname FROM Employees WHERE name like ?';
EXEC SQL DECLARE employee_cursor CURSOR FOR emp_stat;
EXEC SQL OPEN employee_cursor USING :pattern;

Das folgende Beispiel stammt aus einer Prozedur oder einem Trigger.

BEGIN
   DECLARE cur_employee CURSOR FOR
   SELECT Surname
   FROM Employees;
   DECLARE name CHAR(40);
   OPEN cur_employee;
   LP: LOOP
         FETCH NEXT cur_employee INTO name;
         IF SQLCODE <> 0 THEN LEAVE LP END IF;
    ...
   END LOOP
   CLOSE cur_employee;
END