Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:
Databricks Runtime 18.1 i nowszych
Otwiera kursor i wykonuje zapytanie, umieszczając je przed pierwszym wierszem.
Instrukcja OPEN wykonuje zapytanie zdefiniowane w DECLARE CURSOR deklaracji, powiązanie jakichkolwiek znaczników parametrów, jeśli określono. Po otwarciu kursor może służyć FETCH do pobierania wierszy.
Ta wiadomość może być używana tylko w ramach złożonego wyrażenia .
Uwaga / Notatka
Podczas otwierania kursora są zgłaszane błędy semantyczne, takie jak TABLE_OR_VIEW_NOT_FOUND lub COLUMN_NOT_FOUND_IN_TABLE , jeśli są obecne. Otwarcie kursora powoduje również rozpoczęcie wykonywania zapytania, co może spowodować, że błędy środowiska uruchomieniowego, takie jak DIVIDE_BY_ZERO w zależności od liczby wykonanych zapytań.
Składnia
OPEN cursor_name [ USING { constant_expr [ AS param_name ] } [, ...] ]
Parametry
-
Nazwa zadeklarowanego kursora. Kursor może być opcjonalnie kwalifikowany za pomocą etykiety instrukcji złożonej, aby odwoływać się do kursora z zakresu zewnętrznego (np.
outer_label.my_cursor). USING { constant_expr [ AS param_name ] } [, ...]Klauzula opcjonalna do powiązania wartości ze znacznikami parametrów w zapytaniu kursora.
- constant_expr: wyrażenie stałe (literał lub zmienna) do powiązania ze znacznikiem parametru. Wyrażenie musi być rzutowane do typu oczekiwanego przez zapytanie.
-
AS param_name: opcjonalne. Dla nazwanych znaczników parametrów (
:param_name) określa, który parametr ma być powiązany. Jeśli nie określono dla nienazwanych znaczników parametrów (?), parametry są powiązane według pozycji.
Notatki
Zachowanie powiązania parametrów jest zgodne z EXECUTE IMMEDIATE:
- Wszystkie znaczniki parametrów w zapytaniu muszą być powiązane.
- W przypadku nazwanych znaczników parametrów (
:name) klauzulaAS param_nameokreśla powiązanie. - W przypadku nienazwanych znaczników parametrów (
?) wyrażenia są powiązane w określonej kolejności.
Jeśli zapytanie kursora zgłasza błąd podczas wykonywania (zobacz Warunki błędu), kursor pozostaje w stanie zamkniętym. Otwarcie kursora, który nie znajduje się w zakresie, powoduje podniesienie CURSOR_NOT_FOUND. Otwarcie kursora, który jest już otwarty, wywołuje CURSOR_ALREADY_OPEN.
Przykłady
-- 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