SQL 저장 프러시저 작업

저장 프로시져는 다른 쿼리 또는 다른 저장 프로시져에서 호출할 수 있는 문 모음입니다. 프로시져는 입력 인수를 사용하고 값을 출력으로 반환할 수 있습니다. BigQuery 데이터 세트에 프로시져의 이름을 지정하고 저장합니다. 저장 프로시져는 여러 사용자가 여러 데이터 세트에서 데이터에 액세스하거나 수정할 수 있습니다. 멀티 문 쿼리도 포함할 수 있습니다.

일부 저장 프로시져는 BigQuery에 내장되어 있으므로 만들 필요가 없습니다. 이것을 시스템 프로시져라고 하며, 시스템 프로시져 참조에서 자세히 알아볼 수 있습니다.

저장 프로시져는 절차적 언어 문을 지원하므로 변수를 정의하고 제어 흐름을 구현할 수 있습니다. 절차적 언어 문에 대한 자세한 내용은 절차적 언어 참조를 참조하세요.

저장 프로시져 만들기

프로시져를 만들려면 CREATE PROCEDURE을 사용합니다.

다음의 개념적 예시에서 procedure_name은 프로시져를 나타내며 프로시져의 본문은 BEGINEND 문 사이에 나타납니다.

CREATE PROCEDURE dataset_name.procedure_name()
BEGIN
-- statements here
END

다음 예시에서는 멀티 문 쿼리가 포함된 프로시져를 보여줍니다. 멀티 문 쿼리는 변수를 설정하고, INSERT 문을 실행하고, 결과를 형식이 지정된 텍스트 문자열로 표시합니다.

CREATE OR REPLACE PROCEDURE mydataset.create_customer()
BEGIN
  DECLARE id STRING;
  SET id = GENERATE_UUID();
  INSERT INTO mydataset.customers (customer_id)
    VALUES(id);
  SELECT FORMAT("Created customer %s", id);
END

앞의 예시에서 프로시져의 이름은 mydataset.create_customer이고 프로시져 본문은 BEGINEND 문 사이에 나타납니다.

프로시져를 호출하려면 CALL 문을 사용하세요.

CALL mydataset.create_customer();

입력 매개변수로 값 입력

프로시져에는 입력 매개변수가 있을 수 있습니다. 입력 매개변수는 프로시져에 대한 입력을 허용하지만 출력을 허용하지 않습니다.

CREATE OR REPLACE PROCEDURE mydataset.create_customer(name STRING)
BEGIN
DECLARE id STRING;
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id, name)
  VALUES(id, name);
SELECT FORMAT("Created customer %s (%s)", id, name);
END

출력 매개변수로 값 출력

프로시져에는 출력 매개변수가 있을 수 있습니다. 출력 매개변수는 프로시져에서 값을 반환하지만 프로시져의 입력을 허용하지 않습니다. 출력 매개변수를 만들려면 매개변수 이름 앞에 OUT 키워드를 사용합니다.

예를 들어 이 프로시져 버전에서는 id 매개변수를 통해 새 고객 ID를 반환합니다.

CREATE OR REPLACE PROCEDURE mydataset.create_customer(name STRING, OUT id STRING)
BEGIN
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id, name)
  VALUES(id, name);
SELECT FORMAT("Created customer %s (%s)", id, name);
END

이 프로시져를 호출하려면 변수를 사용하여 출력 값을 수신해야 합니다.

--- Create a new customer record.
DECLARE id STRING;
CALL mydataset.create_customer("alice",id);

--- Display the record.
SELECT * FROM mydataset.customers
WHERE customer_id = id;

입력/출력 매개변수로 값 입력 및 출력

프로시져에는 입력/출력 매개변수도 있을 수 있습니다. 입력/출력 매개변수는 프로시져에서 값을 반환하고 프로시져의 입력도 허용합니다. 입력/출력 매개변수를 만들려면 매개변수 이름 앞에 INOUT 키워드를 사용합니다. 자세한 내용은 인수 모드를 참조하세요.

루틴 승인

저장 프로시져를 루틴으로 승인할 수 있습니다. 승인된 루틴을 사용하면 결과를 생성한 기본 테이블에 대해 액세스 권한을 부여하지 않고도 특정 사용자 또는 그룹에 쿼리 결과를 공유할 수 있습니다. 예를 들어 승인된 루틴은 데이터에 대한 집계를 계산하거나 테이블 값을 조회하고 이 값을 계산에 사용할 수 있습니다.

승인된 루틴은 테이블 만들기, 삭제, 테이블 조작은 물론 기본 테이블에서 다른 저장 프로시져를 호출합니다.

자세한 내용은 승인된 루틴을 참조하세요.

저장 프로시져 호출

저장 프로시져가 생성된 후 호출하려면 CALL 문을 사용합니다. 예를 들어 다음 문은 저장 프로시져 create_customer를 호출합니다.

CALL mydataset.create_customer();

시스템 프로시져 호출

기본 제공 시스템 프로시져를 호출하려면 CALL 문을 사용합니다. 예를 들어 다음 문은 시스템 프로시져 BQ.REFRESH_MATERIALIZED_VIEW를 호출합니다.

CALL BQ.REFRESH_MATERIALIZED_VIEW;