2013-10-07 2 views
4

다음 대체 방법이 있습니다. 어떤 것을 사용하는 것이 좋으며 그 이유는 무엇입니까?JDBC에서 Oracle 데이터베이스의 저장 프로 시저를 호출 할 때 begin..end 또는 호출 저장 프로 시저 호출

  1. prepareCall ("{call MY_FUN}");

  2. prepareCall "{BEGIN MY_FUN; END;}");

답장을 보내 주셔서 감사합니다.

감사합니다. 요하네스

+0

'{'과'}'는 JDBC에서 매우 특정한 의미를 가지며 (이는 JDBC 이스케이프라고 불린다), 두 번째 것은 유효한 JDBC 이스케이프가 아니며 예외를 던질 것으로 기대된다. –

답변

5

에 달려 있습니다. begin..end을 사용하면 저장 프로 시저를 호출하는 익명의 PL/SQL 프로그램 블록을 호출하기 만하면됩니다. call을 사용하면 SQL에서 프로 시저를 호출합니다. 통화는 가치 등을 반환 할 가능성이있는 추가적인 이점이 있습니다. 자세한 내용은 Oracle Database SQL Language Reference: Call을 참조하십시오.

즉, 이와 같은 절차를 호출하면 차이가별로 없습니다. 이론적으로는 begin..end 프로 시저 자체가 PL/SQL이고 Call 인 SQL이 약간의 오버 헤드가있는 SQL과 PL/SQL간에 추가 컨텍스트 전환을 일으킬 것이므로 약간 더 효율적이라고 생각합니다. 그러나 나는 그것이 존재하더라도 당신이이 차이를 느낄 것이라고 생각하지 않습니다.

3

정확히 1 개의 프로 시저 만 호출하려는 경우 두 문이 동일 할 수 있습니다. 그러나 익명의 PLSQL 블록을 사용하면 훨씬 더 재미있게 할 수 있습니다. 예를 들어 하나 이상의 프로 시저를 호출하거나 PLSQL 블록 내에서 허용되는 구문을 사용하십시오.

prepareCall("BEGIN MY_FUN('no-braces-with-begin-end-syntax'); MORE_FUN; A_LOT_MORE_FUN; END;"); 
-2

요구 사항에 따라 모든 유형의 절차를 사용할 수 있습니다. 친절하게 요구 사항을 명확히하십시오.

관련 문제