source

Oracle SQL 저장 프로시저 호출 및실행

manysource 2023. 6. 29. 20:13

Oracle SQL 저장 프로시저 호출 및실행

문제

Oracle SQL 명령 간의 차이점을 이해하려고 합니다.CALL그리고.EXECUTE.

계속 사용하고 있습니다.CALL스토어드 프로시저를 시작하려고 하지만 다른 개발자와 이야기를 나누면서 그가 거의 독점적으로 사용한다는 것을 알게 되었습니다.EXECUTE온라인에서 제가 잘못하고 있는 것이 있는지 조사해 보았지만 두 명령 간의 명확한 차이가 보이지 않고 사람들이 서로 바꾸어 사용하는 것 같습니다.

설명서에 따르면 (적어도 저장 프로시저와의 상호 작용 측면에서는) 상당히 유사한 것으로 보입니다.

그것은 정말 처럼 보입니다.CALL는 범용 SQL 명령입니다.EXECUTE소유권이 있는 것 같아서 사용하고 싶습니다.CALL위에EXECUTE하지만 다시 말씀드리지만 성능과 관련하여 무엇을 의미하는지 모르겠습니다.

문의사항

  • 저장 프로시저를 시작하는 측면에서 하나가 다른 하나보다 선호됩니까?그게 중요한가요?
  • 만약 그것이 문제가 된다면, 어느 하나가 적절한 상황은 무엇입니까?
  • 둘 사이에 성능 차이가 있습니까?가장 좋은 방법은 무엇입니까?

둘다요.EXEC[ute] SP()그리고.CALL SP()SQL*Plus에서 SP를 실행하는 데 사용할 수 있습니다. BTW도 사용할 수 있습니다.BEGIN SP(); END;

하지만 몇 가지 차이점이 있습니다.

  1. CALLOracle SQL이며 모든 곳에서 작동해야 합니다.Oracle과 통신할 수 있는 다른 DB 클라이언트는 SQL*Plus EXEC을 지원하거나 지원하지 않을 수 있습니다.대부분은 Oracle SQL Developer, SQLWorkbench/J 등을 지원하지만 일부는 그렇지 않습니다(Lequibase).

  2. 전달된 매개 변수의 데이터 유형CALL문은 SQL 데이터 형식이어야 합니다.이러한 데이터 유형은 Boolean과 같은 PL/SQL 전용 데이터 유형일 수 없습니다.

  3. EXECSP뿐만 아니라 임의 문을 실행하는 데 사용할 수 있습니다.

  4. 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