2016-09-21 1 views
2

나는 매김을위한 오라클 SQL 쿼리를 쓰고 있어요, 그것은 SQL Developer에서 잘 작동하지만 난 그게Oracle Pagination 쿼리의 열이 잘못 되었습니까?

되는 SQLException 던져 봄 JDBC 템플릿을 사용하여 자바 응용 프로그램을 통해 실행하려고하면 잘못된 열 유형

실제 쿼리 : 자바에서

SELECT * 
FROM (
    SELECT a.*, rownum r__ 
    FROM ( 
     SELECT * 
     FROM Packet 
     ORDER BY packet_date_created DESC 
    ) a 
    WHERE rownum < ((pageNumber*pageSize)+1) 
) 
WHERE r__ >= (((pageNumber-1)* pageSize)+1) 

:

,
MapSQlParameterSource paramSource = new MapSQlParameterSource() 
paramSource.addValue("pageNumber", pageNumber.intValue()) 
paramSource.addValue("pageSize", pageSize.intValue()) 

String sqlString = 
    "SELECT * FROM (SELECT a.*, rownum r__ FROM (SELECT FROM packet ORDER BY packet_date_created DESC) a " + 
    "WHERE rownum < ((:pageNumber * :pageSize) + 1)) " + 
    "WHERE r__ >= (((:pageNumber-1) * :pageSize) + 1)"; 
List<PacketDTO> packetDTOList = jdbcTemplate.query(sqlString, paramSource, new PacketMapper()); 

주위의 제안은 정말 감사하겠습니다.

+0

공유 한 자바 코드 목록이 불완전합니다. 무엇이'paramSource'에 들어 있습니까? –

+0

내가 추가했습니다. 제발 봐 –

+0

패킷 테이블의 테이블 정의는 무엇입니까? 예외 스택을 게시 할 수 있습니까? PacketMapper 코드를 게시 할 수 있습니까? – Nick

답변

0

문제는 rownum speudocolumn에 대한 별칭의 특수 "__"문자가 있다고 생각합니다. rownum 반환 열에 다른 별칭 이름을 사용하거나 {escape '_'} 포함 구문을 사용해보십시오. 나는 단순히 pseudocolumn 별칭을 직접 변경합니다.

+0

오라클은 열 별칭으로 r__을 사용하는 것이 좋습니다. 시도해보십시오 : 선택 r__ 에서 (선택 rownum으로 r__ 이중에서 rownum에 의해 연결 <10) –

0

NamedParameterJdbcTemplate을 사용하셨습니까?

SELECT * 
     FROM Packet 
     ORDER BY packet_date_created DESC 
OFFSET :v_offset ROWS FETCH NEXT :v_CountNextRows ROWS ONLY; 

추신 : 그것은 단지 오라클 12C에서 작동이 쿼리 오라클을 구현할 수

<bean class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> 
<constructor-arg ref="dataSource" /> 
</bean> 
+0

네, 그것을 시도 .. 아직도 작동하지 않습니다 –

0

이 같은

....

관련 문제