내 질문은 : 나는 내 응용 프로그램에서 쿼리를 실행하면ORA-00907 내 자바 응용 프로그램에서 quering하지만 SQL Developer에서 잘 작동 할 때
select *
from (select seq, audit_ts, message_type
from log2
where 1 = 1
and message_type in ('SOURCE', 'DEST')
order by seq desc)
where ROWNUM <= ?
, 내가 얻을 :
java.sql.SQLSyntaxErrorException : ORA-00907 : 누락 오른쪽 괄호
EDIT : 여기 자바 execut 인 질의. 검색 결과 집합을 반환하려고하므로 접두사에 SELECT 문이 포함 된 다음 사용자 검색에 따라 매개 변수가있는 WHERE 절인 접미사 ("AUDIT_LOG_SEARCH2"에서 일부)를 가질 수 있습니다.
StringBuffer query = new StringBuffer(300);
query.append(dbAdapter.getQuery("AUDIT_LOG_ENTRY_PREFIX"));
query.append(dbAdapter.getQuery("AUDIT_LOG_SEARCH2"));
// Insert parameters to complete the sql prepared statement
PreparedStatement ps = _dbConn.prepareStatement(query.toString());
ResultSet rs = ps.executeQuery();
그러나 SQL Developer에서 별도로 실행할 때 쿼리가 올바르게 실행됩니다. 쿼리는 원래 Postgres 용으로 작성된 다음 Oracle 용으로 업데이트되었습니다. 어떤 팁?
이들 중 어떤 것도 관련이 있다고 생각하지 마십시오 :'seq'와'seq_num' 다른 열; 바인드 변수에 대해 어떤 값을 설정하고 있습니까? 어떻게'execute' 또는'executeQuery'를 실행하고 있습니까? 이 문제를 해결하기 위해 Java 코드를 표시하는 것이 도움이 될 수 있습니다. –
그건 완벽하게 좋은 오라클입니다. 아마도 문제는 자바 코드에 있습니다. 검색어 작성 방법을 게시 할 수 있습니까? 나는 그것이 잠재적 조건의 무리라고 가정하고있다. ('WHERE 1 = 1'은 비슷한 상황에서 내가 한 일이다.) 너무 많지 않으면 전체 덩어리를 게시 할 수 있는가? –
쿼리를 빌드하는 로직이'getQuery' 메소드에있는 것처럼 보입니다. 그것을 추적하기보다는'query.append (dbAdapter.getQuery ("AUDIT_LOG_SEARCH2"))'문장 다음에'query.toString()'의 값을 인쇄하거나 로깅 할 수 있습니까?그런 다음 자신이 생각하는 것임을 확인하십시오. –