2014-10-03 3 views
1

다음 쿼리를 실행하여 조건부로 임시 테이블을 삭제하려고합니다. JPA 2의 기본 쿼리에 여러 개의 문을 가질 수 있습니까?

String dropSql = "BEGIN EXECUTE IMMEDIATE 'DROP TABLE " + tmpTblName + "';" + 
    " EXCEPTION" + 
    " WHEN OTHERS THEN" + 
    " IF SQLCODE!=-942 THEN" + 
    " RAISE;" + 
    " END IF;" + 
    " END"; 

그리고이 같은 기본 쿼리로 실행합니다

JPA.em().createNativeQuery(dropSql) 
      .executeUpdate(); 

그러나, JPA 나를 못하게 또는 오히려, 오라클 DB는하지 않습니다. 분명히; 어떻게 든 도망 가거나 잘못 해석 될 수 있습니다.

Caused by: java.sql.SQLException: ORA-06550: line 1, column 120: 
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: 

; <an identifier> <a double-quoted delimited-identifier> 
The symbol ";" was substituted for "end-of-file" to continue. 

내 목표를 달성하기 위해 별도의 쿼리를 사용하여 살아야합니까? 아니면 이에 대한 트릭이 있습니까?

답변

2

마침내 END 블록 다음에 세미콜론이 누락되었습니다.

String dropSql = "BEGIN EXECUTE IMMEDIATE 'DROP TABLE " + tmpTblName + "';" + 
    " EXCEPTION" + 
    " WHEN OTHERS THEN" + 
    " IF SQLCODE!=-942 THEN" + 
    " RAISE;" + 
    " END IF;" + 
    " END;"; 
+1

당신 말이 맞습니다. jpa가 일관성이없는 것처럼 보입니다. 단 하나의 문장이있을 때는 끝에 세미콜론이 있어서는 안됩니다. – Rythmic

+1

실제로 SQL은 그것을 필요로하지 않지만 PL/SQL은 그것을 필요로합니다. –

관련 문제