행위

Execute 와 call 차이점

DB CAFE

thumb_up 추천메뉴 바로가기


1 프로시져 실행시 Execute 와 call 차이점[편집]

  • EXEC[ute] SP() 와 CALL SP() 둘다 SQL*Plus 에서 사용가능
  • BEGIN SP(); END; PL/SQL로도 가능

1.1 차이점[편집]

1.1.1 CALL[편집]

  1. CALL 은 Oracle SQL 이고 어디에서든 동작한다.
  2. SQL*Plus 이외 다른 DB 클라이언트 프로그램 EXEC를 지원하지 않는다.(Toad,Orange 에서도 동작함.)
  3. CALL SP; 에 사용되는 파라미터는 반드시 SQL data type 이여야 함.
    - BOOLEAN 과 같은 PL/SQL-only data type 은 동작 하지 않음.

1.1.2 EXEC[편집]

  1. EXEC는 SP뿐만 아니라 임의의 문장을 실행 할수 있음.
    (EXEC could be used to execute not only an SP, but an arbitrary statement.)
  2. 만약 SP가 파라미터가 없으면 아래와 같이 사용가능
    EXEC SP;
  3. 그러나 CALL 은 아래와 같이 빈괄호 필요함.
    CALL SP();

1.2 차이점 테스트 예제[편집]

  • 토드에서 아래 함수 실행시 차이점을 확인 할수 있음.
    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는 유형(이 경우 커서)을 입력하라는 메시지를 표시.