Paginação no Oracle

4 respostas
P
Estou usando o método de paginação(acho que peguei aqui):
public static String paging(String strSQL, int intInicio, int intLimite) {  
       return "SELECT * FROM (SELECT PAGING.*, ROWNUM PAGING_RN FROM" +  
               " (" + strSQL + ") PAGING WHERE (ROWNUM <= " + intLimite + "))" +  
               " WHERE (PAGING_RN >= " + intInicio + ")";  
   }
Mas recebo esse erro ao clicar no botão de prosseguir:
java.sql.SQLSyntaxErrorException: ORA-00918: coluna definida de maneira ambígua

	at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:91)
	at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:206)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)
	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1034)
	at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:183)
	at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:780)
	at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:855)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1186)
	at oracle.jdbc.driver.OracleStatement.doScrollExecuteCommon(OracleStatement.java:4219)
	at oracle.jdbc.driver.OracleStatement.doScrollStmtExecuteQuery(OracleStatement.java:4348)
	at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1384)
	at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:387)
	at br.testes.model.PagingTableModel.setQuery(PagingTableModel.java:105)
	at br.testes.gui.PaginadorFrame$7.run(PaginadorFrame.java:298)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
java.sql.SQLException: ORA-01003: não há instrução analisada
O detalhe é que a consulta normal:
"SELECT A.CONTROLE,C.REGISTRO,U.REGISTRO FROM ANTIDOPING A,CONTRAPROVA C,USUARIO U WHERE C.REGISTRO= U.REGISTRO AND A.REGISTRO= U.REGISTRO";
Funciona perfeitamente e carrega minha jtable com 10000linhas sem problemas. A saída do método paging:
Consulta:SELECT * FROM (SELECT PAGING.*, ROWNUM PAGING_RN FROM (SELECT A.CONTROLE,C.REGISTRO,U.REGISTRO FROM ANTIDOPING A,CONTRAPROVA C,USUARIO U WHERE C.REGISTRO= U.REGISTRO AND A.REGISTRO= U.REGISTRO) PAGING WHERE (ROWNUM <= 200)) WHERE (PAGING_RN >= 100)
Porquê a string gerada pelo método paging dá esse erro?

4 Respostas

A

A mensagem de erro mostra que a query se perde devido a colunas com mesmo nome em diferentes tabelas. Se ao invés de select * no método paging você enumerar as colunas com o alias?

P

Não entendi muito bem…a query não dá problemas fora do método paging…Dá um exemplo? :smiley:

A

Algo do tipo:

Consulta:SELECT * FROM (SELECT PAGING.*, ROWNUM PAGING_RN FROM (SELECT A.CONTROLE,C.REGISTRO registro_contraprova, U.REGISTRO registro_usuario FROM ANTIDOPING A,CONTRAPROVA C,USUARIO U WHERE C.REGISTRO= U.REGISTRO AND A.REGISTRO= U.REGISTRO) PAGING WHERE (ROWNUM <= 200)) WHERE (PAGING_RN >= 100)
P

alex1975,
muito obrigado!Funcionou perfeitamente!!!

Criado 13 de setembro de 2012
Ultima resposta 13 de set. de 2012
Respostas 4
Participantes 2