프로시져 실행시 Execute 와 call 차이점
- EXEC[ute] SP() 와 CALL SP() 둘다 SQL*Plus 에서 사용가능
- BEGIN SP(); END; PL/SQL로도 가능
차이점
CALL
- CALL 은 Oracle SQL 이고 어디에서든 동작한다.
- SQL*Plus 이외 다른 DB 클라이언트 프로그램 EXEC를 지원하지 않는다.(Toad,Orange 에서도 동작함.)
- CALL SP; 에 사용되는 파라미터는 반드시 SQL data type 이여야 함.
- - BOOLEAN 과 같은 PL/SQL-only data type 은 동작 하지 않음.
EXEC
- EXEC는 SP뿐만 아니라 임의의 문장을 실행 할수 있음.
- (EXEC could be used to execute not only an SP, but an arbitrary statement.)
- 만약 SP가 파라미터가 없으면 아래와 같이 사용가능
EXEC SP;
- 그러나 CALL 은 아래와 같이 빈괄호 필요함.
CALL SP();
차이점 테스트 예제
- 토드에서 아래 함수 실행시 차이점을 확인 할수 있음.
- If you are calling a proc that returns a sys_refcursor using Toad,
-- difference between CALL and EXEC.
create procedure foo(i in number,o out sys_refcursor)
as
begin
open o for select i from dual;
end;
exec foo(1,:r); -- 1 rows
call foo(1,:r); -- 0 rows
- 매개 변수에 ;(콜론) 을 붙일 때, Toad는 유형(이 경우 커서)을 입력하라는 메시지를 표시.