適用対象:はい Databricks Runtime 18.1 以降と![]()
カーソルを開き、最初の行の前に配置してクエリを実行します。
OPEN ステートメントは、DECLARE CURSOR宣言で定義されたクエリを実行し、指定されている場合はパラメーター マーカーをバインドします。 一度開くと、カーソルを FETCH と共に使用して行を取得できます。
このステートメントは、 複合ステートメント内でのみ使用できます。
注
カーソルを開くと、 TABLE_OR_VIEW_NOT_FOUND や COLUMN_NOT_FOUND_IN_TABLE などのセマンティック エラーが発生します (存在する場合)。 カーソルを開くとクエリの実行も開始されます。これにより、クエリの実行量に応じて 、DIVIDE_BY_ZERO などの実行時エラーが発生する可能性があります。
構文
OPEN cursor_name [ USING { constant_expr [ AS param_name ] } [, ...] ]
パラメーター
-
宣言されたカーソルの名前。 必要に応じて、外側のスコープ (
outer_label.my_cursorなど) からカーソルを参照する複合ステートメント ラベルでカーソルを修飾できます。 USING { constant_expr [ AS param_name ] } [, ...]カーソル クエリの パラメーター マーカー に値をバインドする省略可能な句。
- constant_expr: パラメーター マーカーにバインドする 定数式 (リテラルまたは変数)。 式は、クエリで予期される型にキャスト可能である必要があります。
-
AS param_name: 省略可能。
名前付きパラメーター マーカー (
:param_name) の場合、バインドするパラメーターを指定します。 名前のないパラメーター マーカー (?) に指定しない場合、パラメーターは位置によってバインドされます。
注記
パラメーター バインドの動作は、 EXECUTE IMMEDIATEと一致します。
- クエリ内のすべての パラメーター マーカー をバインドする必要があります。
-
名前付きパラメーター マーカー (
:name) の場合、AS param_name句はバインディングを指定します。 -
名前のないパラメーター マーカー (
?) の場合、式は指定された順序でバインドされます。
実行中にカーソルのクエリでエラーが発生した場合 ( エラー条件を参照)、カーソルは閉じた状態のままです。 スコープ内にないカーソルを開くと、 CURSOR_NOT_FOUNDが発生します。 既に開いているカーソルを開くと、 CURSOR_ALREADY_OPENが発生します。
例示
-- Open a simple cursor without parameters
> BEGIN
DECLARE total INT;
DECLARE my_cursor CURSOR FOR SELECT sum(id) FROM range(10);
OPEN my_cursor;
FETCH my_cursor INTO total;
VALUES (total);
CLOSE my_cursor;
END;
45
-- Open cursor with positional parameters
> BEGIN
DECLARE total INT;
DECLARE param_cursor CURSOR FOR
SELECT sum(id) FROM range(100) WHERE id BETWEEN ? AND ?;
OPEN param_cursor USING 10, 20;
FETCH param_cursor INTO total;
VALUES (total);
CLOSE param_cursor;
END;
165
-- Open cursor with named parameters
> BEGIN
DECLARE min_val INT;
DECLARE named_cursor CURSOR FOR
SELECT min(id) FROM range(100) WHERE id >= :threshold;
OPEN named_cursor USING 25 AS threshold;
FETCH named_cursor INTO min_val;
VALUES (min_val);
CLOSE named_cursor;
END;
25