Oracle SQL 저장 프로시저 호출 및실행
문제
Oracle SQL 명령 간의 차이점을 이해하려고 합니다.CALL
그리고.EXECUTE
.
계속 사용하고 있습니다.CALL
스토어드 프로시저를 시작하려고 하지만 다른 개발자와 이야기를 나누면서 그가 거의 독점적으로 사용한다는 것을 알게 되었습니다.EXECUTE
온라인에서 제가 잘못하고 있는 것이 있는지 조사해 보았지만 두 명령 간의 명확한 차이가 보이지 않고 사람들이 서로 바꾸어 사용하는 것 같습니다.
설명서에 따르면 (적어도 저장 프로시저와의 상호 작용 측면에서는) 상당히 유사한 것으로 보입니다.
- http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4008.htm
- http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12022.htm
- http://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_app_dbms_aw026.htm
그것은 정말 처럼 보입니다.CALL
는 범용 SQL 명령입니다.EXECUTE
소유권이 있는 것 같아서 사용하고 싶습니다.CALL
위에EXECUTE
하지만 다시 말씀드리지만 성능과 관련하여 무엇을 의미하는지 모르겠습니다.
문의사항
- 저장 프로시저를 시작하는 측면에서 하나가 다른 하나보다 선호됩니까?그게 중요한가요?
- 만약 그것이 문제가 된다면, 어느 하나가 적절한 상황은 무엇입니까?
- 둘 사이에 성능 차이가 있습니까?가장 좋은 방법은 무엇입니까?
둘다요.EXEC[ute] SP()
그리고.CALL SP()
SQL*Plus에서 SP를 실행하는 데 사용할 수 있습니다. BTW도 사용할 수 있습니다.BEGIN SP(); END;
하지만 몇 가지 차이점이 있습니다.
CALL
Oracle SQL이며 모든 곳에서 작동해야 합니다.Oracle과 통신할 수 있는 다른 DB 클라이언트는 SQL*Plus EXEC을 지원하거나 지원하지 않을 수 있습니다.대부분은 Oracle SQL Developer, SQLWorkbench/J 등을 지원하지만 일부는 그렇지 않습니다(Lequibase).전달된 매개 변수의 데이터 유형
CALL
문은 SQL 데이터 형식이어야 합니다.이러한 데이터 유형은 Boolean과 같은 PL/SQL 전용 데이터 유형일 수 없습니다.EXEC
SP뿐만 아니라 임의 문을 실행하는 데 사용할 수 있습니다.SP에 매개 변수가 없는 경우 다음을 사용할 수 있습니다.
EXEC SP;
구문, 그러나CALL
빈 괄호 필요:CALL SP();
Toad를 사용하여 sys_refcursor를 반환하는 proc를 호출하는 경우 CALL과 EXEC 사이에 차이가 있습니다.
절차 foo(i in number, out sys_refcursor)를 dual에서 선택 i에 대해 시작 openo로 생성합니다; 끝;
exec foo(1,:r); -- 1 행을 출력합니다.
call foo(1,:r); -- 출력 0 행
참고: 매개 변수 앞에 콜론을 붙이면 Toad에서 유형(이 경우 커서)을 입력하라는 메시지를 표시합니다.
언급URL : https://stackoverflow.com/questions/20571647/oracle-sql-stored-procedures-call-vs-execute
'source' 카테고리의 다른 글
.NET Guid를 MongoDB 개체로 변환아이디 (0) | 2023.06.29 |
---|---|
Panda DataFrame에서 이름이 X로 시작하는 모든 열을 선택하는 방법 (0) | 2023.06.29 |
Oracle에서 기본 키 열을 인덱싱해야 합니까? (0) | 2023.06.29 |
정규식을 사용하여 Ruby 문자열에서 부분 문자열 추출 (0) | 2023.06.29 |
모든 변경된 파일이 부모 중 한 명과 동의하더라도 결합된 diff 출력으로 병합 커밋을 "git show"하는 방법은 무엇입니까? (0) | 2023.06.29 |