저장 프로시저 호출하기

SQL CALL 명령을 사용하여 저장 프로시저를 호출할 수 있습니다.

사용자가 저장 프로시저를 호출하려면 사용자의 역할에 저장 프로시저에 대한 USAGE 권한 이 있어야 합니다.

저장 프로시저를 호출할 권한이 있으면 CALL 문을 사용하여 저장 프로시저를 호출할 수 있습니다.

참고

익명 프로시저를 만들기도 하고 호출도 하려면 CALL(익명 프로시저 사용) 를 사용하십시오. 익명 프로시저를 만들고 호출하는 데는 CREATE PROCEDURE 스키마 권한이 있는 역할이 필요하지 않습니다.

저장 프로시저에 인자가 있는 경우 해당 인자를 이름 또는 위치로 지정할 수 있습니다.

예를 들어 다음 저장 프로시저는 3개의 인자를 허용합니다.

CREATE OR REPLACE PROCEDURE sp_concatenate_strings(
    first VARCHAR,
    second VARCHAR,
    third VARCHAR)
  RETURNS VARCHAR
  LANGUAGE SQL
  AS
  $$
  BEGIN
    RETURN first || second || third;
  END;
  $$;
Copy

프로시저를 호출할 때 인자를 이름으로 지정할 수 있습니다.

CALL sp_concatenate_strings(
  first => 'one',
  second => 'two',
  third => 'three');
Copy

인자를 이름으로 지정하면 인자를 특정 순서로 지정할 필요가 없습니다.

CALL sp_concatenate_strings(
  third => 'three',
  first => 'one',
  second => 'two');
Copy

인자를 위치로 지정할 수도 있습니다.

CALL sp_concatenate_strings(
  'one',
  'two',
  'three');
Copy

다음 사항을 참고하십시오.

  • 이름 또는 위치로 모든 인자를 지정해야 합니다. 일부 인자는 이름으로, 다른 인자는 위치로 지정할 수는 없습니다.

    이름으로 인자를 지정할 때 인자 이름 주위에 큰따옴표를 사용할 수 없습니다.

  • 두 함수 또는 두 프로시저가 이름은 같지만 인자 유형이 다른 경우 인자 이름이 다르면 인자 이름을 사용하여 실행할 함수 또는 프로시저를 지정할 수 있습니다. 프로시저 및 함수 오버로딩 섹션을 참조하십시오.

저장 프로시저를 실행하려면 CALL 문을 사용하십시오. 예:

call stproc1(5.14::FLOAT);
Copy

저장 프로시저에 대한 각 인자는 일반 식일 수 있습니다.

CALL stproc1(2 * 5.14::FLOAT);
Copy

인자는 하위 쿼리일 수 있습니다.

CALL stproc1(SELECT COUNT(*) FROM stproc_test_table1);
Copy

CALL 문당 하나의 저장 프로시저만 호출할 수 있습니다. 예를 들어 다음 문은 실패합니다.

call proc1(1), proc2(2);                          -- Not allowed
Copy

또한, 저장 프로시저 CALL을 식의 일부로 사용할 수 없습니다. 예를 들어, 다음 문은 모두 실패합니다.

call proc1(1) + proc1(2);                         -- Not allowed
call proc1(1) + 1;                                -- Not allowed
call proc1(proc2(x));                             -- Not allowed
select * from (call proc1(1));                    -- Not allowed
Copy

하지만 저장 프로시저 내에서, 저장 프로시저는 다른 저장 프로시저를 호출하거나 재귀적으로 자신을 호출할 수 있습니다.

조심

중첩 호출은 최대 허용 스택 깊이를 초과할 수 있으므로 호출을 중첩할 때, 특히 재귀를 사용할 때 주의하십시오.