2017-12-11 3 views
0

제목에서 알 수 있듯이 쿼리에 상관없이 하나의 행을 선택해야합니다. ROWNUMROWNUM() 기능이 있으므로 HSQLDB에서 작동하지 않습니다. 더구나, 연결 URL 설정과 schema-hsqldb.sql에서 ORA dialect를 설정하면 작동하지 않습니다. (그렇지 않아도됩니다. 이유는 모르겠습니다.) 쿼리는 Oracle에서 완벽하게 작동합니다.Oracle Dialect로 HSQLDB에서 한 행만 선택하십시오.

제안 사항? 어떤 대단히 감사합니다!

+0

rownum()으로 쿼리를 실행하면 어떻게됩니까? 예 : 'select * from my_table where rownum() = 1' – kfinity

+0

@kfinity 기꺼이 도와 줘서 고마워! 그것은'SQLSyntaxErrorException : ORA-00907 : 오른쪽 괄호가 누락되었습니다 .' 오류가납니다. –

답변

1

나는 그것이 열입니다 생각 접두사에게 THIS_ROWNUM 최대 절전 모드 발견했습니다. 다음과 같은 사용자 지정 dialect resolver를 추가 했으므로 이제 작동합니다.

public class RownumStandardDialectResolver extends StandardDialectResolver { 

    @Override 
    public Dialect resolveDialect(DialectResolutionInfo info) { 
     Dialect dialect = super.resolveDialect(info); 
     dialect.getKeywords().add("rownum"); 

     return dialect; 
    } 

} 
1

ROWNUM 대신 괄호없이 ROWNUM()을 사용하면 오류가 발생합니다. HSQLDB에서 어떻게 관리되는지 확실치 않습니다.

12c를 사용하고 있으므로 ROWNUM 대신 FETCH..FIRST..ONLY을 사용할 수 있습니다.

select * from employees FETCH FIRST 1 ROWS ONLY; 

낮은 버전에서는, 당신은 당신이 적어도 하나의 UNIQUE KEY (반드시 선언 제약 만의 고유 행을 식별하는 열 집합) 테이블에이 제공 row_number() 사용할 수 있습니다. 내 경우에는 (내가 매우 복잡한 SQL을) 것을 검색, 울고 자살의 생각 3 일 후

select b.<columns> FROM 
(
    select t.*, row_number() OVER (ORDER BY <unique_key_column_s) rn from yourtable t 
) b WHERE b.rn = 1; 
+0

답변 해 주셔서 감사합니다! 이걸로 나를 도우려는 사람을 만나는 것은 대단한 일입니다 :) 그러나'ROWNUM '의 문제는 테스트를 할 때 발생합니다. 'FETCH..FIRST..ONLY'도 작동하지 않습니다 :'HsqlException : unexpected 토큰 : SELECT'. id 이외의 고유 한 열이 없다 : c –

관련 문제