저장 프로시저 호출하기¶
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;
$$;
프로시저를 호출할 때 인자를 이름으로 지정할 수 있습니다.
CALL sp_concatenate_strings(
first => 'one',
second => 'two',
third => 'three');
인자를 이름으로 지정하면 인자를 특정 순서로 지정할 필요가 없습니다.
CALL sp_concatenate_strings(
third => 'three',
first => 'one',
second => 'two');
인자를 위치로 지정할 수도 있습니다.
CALL sp_concatenate_strings(
'one',
'two',
'three');
다음 사항을 참고하십시오.
이름 또는 위치로 모든 인자를 지정해야 합니다. 일부 인자는 이름으로, 다른 인자는 위치로 지정할 수는 없습니다.
이름으로 인자를 지정할 때 인자 이름 주위에 큰따옴표를 사용할 수 없습니다.
두 함수 또는 두 프로시저가 이름은 같지만 인자 유형이 다른 경우 인자 이름이 다르면 인자 이름을 사용하여 실행할 함수 또는 프로시저를 지정할 수 있습니다. 프로시저 및 함수 오버로딩 섹션을 참조하십시오.
예¶
저장 프로시저를 실행하려면 CALL 문을 사용하십시오. 예:
call stproc1(5.14::FLOAT);
저장 프로시저에 대한 각 인자는 일반 식일 수 있습니다.
CALL stproc1(2 * 5.14::FLOAT);
인자는 하위 쿼리일 수 있습니다.
CALL stproc1(SELECT COUNT(*) FROM stproc_test_table1);
CALL 문당 하나의 저장 프로시저만 호출할 수 있습니다. 예를 들어 다음 문은 실패합니다.
call proc1(1), proc2(2); -- Not allowed
또한, 저장 프로시저 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
하지만 저장 프로시저 내에서, 저장 프로시저는 다른 저장 프로시저를 호출하거나 재귀적으로 자신을 호출할 수 있습니다.
조심
중첩 호출은 최대 허용 스택 깊이를 초과할 수 있으므로 호출을 중첩할 때, 특히 재귀를 사용할 때 주의하십시오.