"Execute 와 call 차이점"의 두 판 사이의 차이
DB CAFE
(새 문서: == 프로시져 실행시 Execute 와 call 차이점 == * EXEC[ute] SP() 와 CALL SP() 둘다 SQL*Plus 에서 사용가능 * BEGIN SP(); END; PL/SQL로도 가능 === 차이점 == ==...) |
(→예제) |
||
(같은 사용자의 중간 판 7개는 보이지 않습니다) | |||
3번째 줄: | 3번째 줄: | ||
* BEGIN SP(); END; PL/SQL로도 가능 | * BEGIN SP(); END; PL/SQL로도 가능 | ||
− | === 차이점 == | + | === 차이점 === |
− | ==== CALL === | + | ==== CALL ==== |
# CALL 은 Oracle SQL 이고 어디에서든 동작한다. | # CALL 은 Oracle SQL 이고 어디에서든 동작한다. | ||
− | # 다른 DB 클라이언트 프로그램 EXEC를 지원하지 않는다 | + | # SQL*Plus 이외 다른 DB 클라이언트 프로그램 EXEC를 지원하지 않는다.(Toad,Orange 에서도 동작함.) |
− | # CALL | + | # CALL SP; 에 사용되는 파라미터는 반드시 SQL data type 이여야 함. |
− | # BOOLEAN 과 같은 PL/SQL-only data type 은 동작 하지 않음. | + | #: - BOOLEAN 과 같은 PL/SQL-only data type 은 동작 하지 않음. |
==== EXEC ==== | ==== EXEC ==== | ||
# EXEC는 SP뿐만 아니라 임의의 문장을 실행 할수 있음. | # EXEC는 SP뿐만 아니라 임의의 문장을 실행 할수 있음. | ||
− | #: EXEC could be used to execute not only an SP, but an arbitrary statement. | + | #: (EXEC could be used to execute not only an SP, but an arbitrary statement.) |
− | # 만약 SP가 파라미터가 없으면 <source lang=sql>EXEC SP;</source> | + | # 만약 SP가 파라미터가 없으면 아래와 같이 사용가능<source lang=sql>EXEC SP;</source> |
− | # 그러나 CALL 은 빈괄호 필요함. <source lang=sql>CALL SP();</source> | + | # 그러나 CALL 은 아래와 같이 빈괄호 필요함. <source lang=sql>CALL SP();</source> |
+ | |||
+ | === 차이점 테스트 예제 === | ||
+ | * 토드에서 아래 함수 실행시 차이점을 확인 할수 있음. | ||
+ | *: If you are calling a proc that returns a sys_refcursor using Toad, | ||
+ | <source lang=sql> | ||
+ | -- 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 | ||
+ | </source> | ||
+ | |||
+ | * 매개 변수에 ;(콜론) 을 붙일 때, Toad는 유형(이 경우 커서)을 입력하라는 메시지를 표시. | ||
+ | |||
+ | [[category:oracle]] |
2024년 7월 23일 (화) 18:14 기준 최신판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
1 프로시져 실행시 Execute 와 call 차이점[편집]
- EXEC[ute] SP() 와 CALL SP() 둘다 SQL*Plus 에서 사용가능
- BEGIN SP(); END; PL/SQL로도 가능
1.1 차이점[편집]
1.1.1 CALL[편집]
- CALL 은 Oracle SQL 이고 어디에서든 동작한다.
- SQL*Plus 이외 다른 DB 클라이언트 프로그램 EXEC를 지원하지 않는다.(Toad,Orange 에서도 동작함.)
- CALL SP; 에 사용되는 파라미터는 반드시 SQL data type 이여야 함.
- - BOOLEAN 과 같은 PL/SQL-only data type 은 동작 하지 않음.
1.1.2 EXEC[편집]
- EXEC는 SP뿐만 아니라 임의의 문장을 실행 할수 있음.
- (EXEC could be used to execute not only an SP, but an arbitrary statement.)
- 만약 SP가 파라미터가 없으면 아래와 같이 사용가능
EXEC SP;
- 그러나 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는 유형(이 경우 커서)을 입력하라는 메시지를 표시.