Problemas de obtenção de dados atrvés de ResultSet

5 respostas
N

Caros amigos

Tenho um problema com um ResulSet que criei para obter dados de uma base de dados em oracle.

o ResulSet é o seguinte:

public java.sql.ResultSet  getPrfs_ORASQL(){
        
        try{
            
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn_insPROFPLSQL =       DriverManager.getConnection("jdbc:oracle:thin:@RAGE:1521:BDNAME","USER","PASS");
            CallableStatement cs_insPROFPLSQL=  conn_insPROFPLSQL.prepareCall("{call OBTEM_PROFESSOR2()}");
        
            return  cs_insPROFPLSQL.executeQuery();

        } catch(Exception e){
            if (e.getMessage()!=null){
                System.out.println(e.getClass().getName() + ":\n  " + e.getMessage());}
            
            return null;
        }

   }

este encontra-se num java.Bean com o nome bean_prof.

o Procedimento PL\SQL requerido pelo mesmo é o seguinte:

CREATE OR REPLACE PROCEDURE OBTEM_PROFESSOR2


IS
    CURSOR GETPROF IS
    SELECT ID_PROFESSOR, NOME_PROFESSOR
    FROM PROFESSORES;
    
 	IN_IDPROFESSOR		 		PROFESSORES.ID_PROFESSOR%type;
	IN_NOMEPROFESSOR		 	PROFESSORES.NOME_PROFESSOR%type;
	
			

    TYPE T_PROF IS RECORD
    (
        		TEMPIDPROFESSOR			PROFESSORES.ID_PROFESSOR%type,
				TEMPNOMEPROFESSOR		PROFESSORES.NOME_PROFESSOR%type
				
    );

PTEMP       T_PROF;

VAR_CountRec INT;

BEGIN

    SELECT
            COUNT(*) INTO VAR_CountRec
    FROM
           PROFESSORES;





    OPEN GETPROF;
    LOOP
        FETCH GETPROF INTO PTEMP;
        EXIT WHEN GETPROF%NOTFOUND;
        IN_IDPROFESSOR   	:= PTEMP.TEMPIDPROFESSOR;
        IN_NOMEPROFESSOR	:= PTEMP.TEMPNOMEPROFESSOR;       
   END LOOP;
   CLOSE GETPROF;



                        
                        
END;

A pagina JSP que acede ao ResultSet fa-lo da seguinte forma:

if (BD==2){
                        java.sql.ResultSet X = BEAN_PROF.getPrfs_ORASQL();
                        int z=0;
                        while ( X.next() ) {
                            
                            /*String aa = X.getArray(0);*/
                            String aa = X.getString(1);
                            String bb = X.getString(2);
                        %>
                        <option value=<%=aa %> ><%=bb%></option> 
                        <%z++;
                        }

contudo nada é devolvido.

depois de fazer um debug à pagina a excepção retorna: "Não é possível efectuar extracções em instruções de PLSQL: next"

como resolvo?

sem mais, um abraço de Portugal

5 Respostas

Luiz-SP

Não entendi seu código, vc tá usando sql? Onde está sua query? Seja como for não acho legal ler o resultset no jsp, passe um javabean ou uma collection de javabean para a jsp…sei lá eu faria assim!!

O

Em PL/SQL, para que uma Stored Procedure “retorne dados”, ela deve ser ou uma function ou ter um parâmetro OUT definido.

N

boas!

Então quer dizer que em vez de um prodecure tem de ser uma função?

para que o cursor os dados os dados do cursor sejam devolvidos?

ou o cursor pode ser enviado de outra forma?

abraço

O

Foi isto que eu escrevi no post anterior.

Ou como eu escrevi no post anterior, ter um parâmetro OUT definido que retorna o valor do cursor.

PS: esta sua Stored Procedure está bem “sinistra”. Por que você não usa PreparedStatement para executar este SELECT? Pelo o que eu entedi, esta Stored Procedure retorna todos os registros da Tabela PROFESSOSRES. Você faz um COUNT(*), mas não usa para nada?

Pedrosa

Essa sua procedure está meio confusa mesmo, e evite ao máximo amarrar as regras de negócio ao banco de dados atravês de procedures, já foi o tempo que isso era moda, não tem sentido nenhum fazer uma query simples em uma procedure.

Criado 19 de setembro de 2007
Ultima resposta 20 de set. de 2007
Respostas 5
Participantes 4