O problema

    A Stored Procedure est� funcionando adequadamente, j� foi testada v�rias vezes utilizando chamadas a partir de blocos PL/SQL e est� retornando os arrays corretamente.
    A classe PesquisaConcess.java compila normalmente, por�m, a execu��o parece entrar em loop infinito na linha cstmt.executeQuery().
     Segue as classes, o header da Stored Procedure e a defini��o dos datatypes utilizados.
 
    O que h� de errado ? � necess�rio inicializar os varrays, igual a quando se faz uma chamada de dentro do Oracle ? Se sim, como se faz, n�o achei na documenta��o ?
 
    Se puderem me dar um dica, uma id�ia de onde eu estou marcando toca, agrade�o !
    abra�os e obrigado,
 
                Astor R. Freitas
 

Classes JAVA 1.3.2

/****************************
  ConfiguracaoConexao.java
*****************************/
import java.sql.*;
import oracle.jdbc.driver.*;
 
public class ConfiguracaoConexao {
 
    public ConfiguracaoConexao() {
    }
 
    public ConfiguracaoConexao(String server, int port, String instance, String user, String passw) {
       servidor = server;
       numporta = port;
       sid      = instance;
       usuario  = user;
       senha    = passw;
    }
 
    public Connection getConexao() throws SQLException  {
       // Carregar o driver Oracle para o JDBC
       DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
       return DriverManager.getConnection("jdbc:oracle:thin:@"+servidor+":"+numporta+":"+sid,usuario,senha);
    }
 
    public String getServidor(){
       return servidor;
    }
 
    public int getNumPorta(){
       return numporta;
    }
 
    public String getSid(){
       return sid;
    }
 
    public String getUsuario(){
       return usuario;
    }
 
    public String getSenha(){
       return senha;
    }
 
    private Connection conn;
    private String servidor = "srv-www-dxtsp";
    private int numporta = 1521;
    private String sid = "ci_gm";
    private String usuario = "clideres";
    private String senha = "clideres";
}
 
 
 
/****************************
  PesquisaConcess.java
*****************************/
import oracle.sql.*;
import oracle.jdbc.driver.*;
import java.sql.*;
 
public class PesquisaConcess {

   public PesquisaConcess() throws SQLException{
      QtdConcess= 0;
      p_StaCode ="00";
      p_StaMsg  ="OK";
 
      ConfiguracaoConexao ConfigConex = new ConfiguracaoConexao();
      Connection Conexao = ConfigConex.getConexao();
 
      if (Conexao != null){
 
      OracleCallableStatement cstmt = (OracleCallableStatement)Conexao.prepareCall("begin P_ClTodasConcessHab(:1,:2,:3,:4,:5); end;");

       cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
       cstmt.registerOutParameter(2, OracleTypes.VARCHAR);
       cstmt.registerOutParameter(3, OracleTypes.ARRAY,"T_IDCONCESS");
       cstmt.registerOutParameter(4, OracleTypes.ARRAY,"T_NOMEFANTASIA");
       cstmt.registerOutParameter(5, OracleTypes.INTEGER);
 
       // Na execu��o da linha abaixo, o programa parece entrar em um loop infinito
       cstmt.executeQuery();
 
       p_StaCode= cstmt.getString(1);
       p_StaMsg = cstmt.getString(2);
       ARRAY IdConcess = cstmt.getARRAY(3); 
       ARRAY NomeFantasia= cstmt.getARRAY(4);
       QtdConcess  = cstmt.getInt(5);
       cstmt.close();
       Conexao.close();
        } // do if (Conexao != null)
 
    }
 
    public static void main(String[] args) throws SQLException{
         PesquisaConcess pesq = new PesquisaConcess();
         System.out.println(pesq.getQtdConcess());
         System.out.println(pesq.getp_StaCode());
         System.out.println(pesq.getp_StaMsg());
    }
 
    public String[] getTodosNomeFantasia(){
          return NomeFantasia;
    }
 
    public int[] getTodosIdConcess(){
          return IdConcess;
    }
    public int getQtdConcess(){
          return QtdConcess;
    }
    public String getp_StaCode(){
          return p_StaCode;
    }
    public String getp_StaMsg(){
          return p_StaMsg;
    }
 
    private int[] IdConcess;
    private String[] NomeFantasia;
    private int QtdConcess;
    private String p_StaCode;
    private String p_StaMsg;
}

No Oracle 8.1.5

/****************************
      Stored Procedure
*****************************/
 
PROCEDURE P_ClTodasConcessHab(
        p_StaCode        IN OUT     K_ClTpDados.s_StaCode,
        p_StaMsg         IN OUT     K_ClTpDados.s_StaMsg,
        p_IdConcess      IN OUT     t_IdConcess,
       p_NomeFantasia   IN OUT     t_NomeFantasia,
        p_QtdConcessHab  IN OUT     NUMBER)
 
/****************************
      Datatypes utilizados
*****************************/
CREATE OR REPLACE type t_IdConcess as varray(1000) of NUMBER(5)
/
 
CREATE OR REPLACE type t_NomeFantasia as varray(1000) of VARCHAR2(40)
/
 
 

    Astor Rog�rio Freitas
    Dextron - Management Consulting
    Fone: (11) 3845 5069 / 5542 5954
    Email: [EMAIL PROTECTED]

Enviado em 03 de Maio de 2001.

Responder a