다음을 통해 공유


시작 끝 복합문

적용 대상:확인 표시 예 Databricks SQL 확인 표시 예 Databricks Runtime 16.3 이상

일련의 SQL 문, 흐름 제어 문, 지역 변수 선언 및 예외 처리기를 포함할 수 있는 SQL 스크립트 블록을 구현합니다.

메모

Notebook에서 복합 구문을 호출할 때 이는 셀에서 유일한 구문이어야 합니다.

통사론

[ label : ]
      BEGIN
      [ { declare_variable | declare_condition } ; [...] ]
      [ declare_cursor ; [...] ]
      [ declare_handler ; [...] ]
      [ SQL_statement ; [...] ]
      END [ label ]

declare_variable
  DECLARE variable_name [, ...] datatype [ DEFAULT default_expr ]

declare_condition
  DECLARE condition_name CONDITION [ FOR SQLSTATE [ VALUE ] sqlstate ]

declare_cursor
  DECLARE cursor_name [ ASENSITIVE | INSENSITIVE ] CURSOR FOR query [ FOR READ ONLY ]

declare_handler
  DECLARE handler_type HANDLER FOR condition_values handler_action

handler_type
  EXIT | CONTINUE

condition_values
 { { SQLSTATE [ VALUE ] sqlstate | condition_name } [, ...] |
   { SQLEXCEPTION | NOT FOUND } [, ...] }

Databricks Runtime 17.2 이전에는 한 번에 하나의 변수만 선언할 수 있습니다.

매개 변수

  • 레이블

    선택적 식별자는 화합물 내에 정의된 변수를 한정하고 화합물을 남기는 데 사용됩니다. 두 레이블 항목이 모두 일치해야 하며 END 레이블은 label: 지정한 경우에만 지정할 수 있습니다.

    최상위 복합 문에 레이블을 지정해서는 안 됩니다.

  • NOT ATOMIC

    복합 내의 SQL 문이 실패하면 이전 SQL 문이 롤백되지 않도록 지정합니다. 이 동작은 기본값이자 유일한 동작입니다.

  • declare_variable

    하나 이상의 변수에 대한 지역 변수 선언

    • variable_name

      변수의 이름입니다. 이름은 수식되거나 한정되지 않아야 하며 복합 문 내에서 고유해야 합니다.

    • data_type

      지원되는 모든 데이터 형식입니다. data_type 생략된 경우 DEFAULT를 지정해야 하며 형식은 default_expression 파생됩니다.

    • { DEFAULT | = } default_expression

      선언 후 변수의 초기 값을 정의합니다. default_expression은 data_type으로 형 변환이 가능해야 합니다. 기본값을 지정하지 않으면 변수가 NULL로 초기화됩니다.

  • Declare_condition

    로컬 조건 선언

    • <조건_이름>

      수식어가 없는 조건의 이름은 복합 문에 제한됩니다.

    • sqlstate

      A-Z 및 0..9로 구성된 5개의 영숫자 문자(대/소문자를 구분하지 않는)의 STRING 리터럴입니다. SQLSTATE는 '00', '01' 또는 'XX'로 시작하지 않아야 합니다. '02'로 시작하는 모든 SQLSTATE는 미리 정의된 NOT FOUND 예외에서도 포착됩니다. 지정하지 않으면 SQLSTATE는 '45000'입니다.

  • declare_cursor

    적용 대상:yes Databricks Runtime 18.1 이상으로 표시된 확인

    쿼리 결과를 반복하기 위한 로컬 커서 선언입니다.

    메모

    의 경우 DECLARE CURSOR구문 오류만 검색되고 발생합니다. 쿼리는 OPEN을 사용하여 커서를 열 때까지 실행되지 않습니다.

    • cursor_name: 커서의 정규화되지 않은 이름으로, 이 복합 문의 커서에서 고유합니다. OPEN, FETCH 또는 CLOSE에서 커서를 참조하는 경우 중첩된 범위에서 명확하게 구분하기 위해 복합 문 레이블(예: label.my_cursor)로 커서 이름을 한정할 수 있습니다.
    • ASENSITIVE | INSENSITIVE: 선택 사항입니다. 커서가 열리면 결과 집합은 DML 변경 내용의 영향을 받지 않습니다. 이는 기본값이며 지원되는 동작입니다.
    • query: 커서를 정의하는 쿼리 입니다. 는 OPEN을 사용하여 커서를 열 때 실행됩니다.
  • declare_handler

    오류 처리기에 대한 선언입니다.

    • handler_type

      • EXIT

        조건이 처리된 후 복합 문을 종료하도록 처리기를 분류합니다. 복합 문 및 중첩된 복합 문 내에서 열린 모든 커서는 암시적으로 닫힙니다.

      • CONTINUE

        적용 대상:yes Databricks Runtime 18.1 이상으로 표시된 확인

        처리기가 완료된 후 실행을 계속하도록 처리기를 분류합니다. 조건을 발생시킨 다음 문으로 실행을 다시 시작합니다.

    • condition_values

      처리기가 적용되는 sqlstate 또는 조건을 지정합니다. 조건 값은 복합 문 내의 모든 처리기 내에서 고유해야 합니다. 특정 조건 값이 SQLEXCEPTION우선합니다.

    • sqlstate

      STRING 리터럴은 5자의 문자로, 'A'-'Z''0'-'9'(대/소문자를 구분하지 않음)가 포함됩니다.

    • <조건_이름>

      이 복합, 외부 복합 문 또는 시스템 정의 오류 클래스 내에 정의된 조건입니다.

    • SQLEXCEPTION

      사용자에게 표시되는 모든 오류 조건에 적용됩니다.

    • NOT FOUND

      커서 결과 집합의 끝을 초과하여 가져올 때 발생하는 CURSOR_NO_MORE_ROWS 조건(SQLSTATE)을 포함하여 SQLSTATE '02000''02' 클래스의 오류 조건에 적용됩니다.

    • handler_action

      조건 값이 발생할 때 실행할 SQL 문입니다. 여러 문을 추가하려면 중첩된 복합 문을 사용합니다.

  • SQL_statement

    DDL, DML, 제어 문 또는 복합 문과 같은 SQL 문입니다. 모든 SELECT 또는 VALUES 문은 호출자가 사용할 수 있는 결과 집합을 생성합니다.

예제

-- A compound statement with local variables, and exit hanlder and a nested compound.
> BEGIN
    DECLARE a INT DEFAULT 1;
    DECLARE b INT DEFAULT 5;
    DECLARE EXIT HANDLER FOR DIVIDE_BY_ZERO
      div0: BEGIN
        VALUES (15);
      END div0;
    SET a = 10;
    SET a = b / 0;
    VALUES (a);
END;
15