Obter tipo definido pelo usuário em Oracle

4 respostas
soaresinfo

Estou fazendo uma chamada a uma proc no oracle, onde o retorno vem atraves de um parametro do tipo OUT, esse retorno é uma TABLE de varchar2. Já tentei passar tipos como ARRAY, OTHER, PLSQL_INDEX_TABLE, mas nenhuma dessas funciona, só consigo usar NUMBER E VARCHAR que são os tipos das TABLES.
Ele gera o seguinte erro:
java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to ‘PR_BUSCA_EQUIPAMENTO’
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to ‘PR_BUSCA_EQUIPAMENTO’
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to ‘PR_BUSCA_EQUIPAMENTO’
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to ‘PR_BUSCA_EQUIPAMENTO’
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to ‘PR_BUSCA_EQUIPAMENTO’
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

Já verifiquei o número de argumentos, e os tipos também. Só sei que é por causa do tipo table. Alguem já passou por isso??

4 Respostas

T

Para esses tipos do Oracle em stored procedures você precisa usar as classes do Oracle (classes que começam por oracle.sql.*) . Veja se você consegue achar a documentação “JDBC Developer’s Guide and Reference” ou “A96654-01” no site da Oracle.

Diogenes

Utilize as constantes da classe oracle.jdbc.OracleTypes

soaresinfo

Eu consegui contornar o problema de outra forma. Mas agora tenho uma dúvida, como é que eu faria para pegar o resultado de um select vindo de uma procedure?? Não só do Oracle mas do SQLServer, utilizando Stored Procedures.

Diogenes

Bem, no Oracle, utilizando a classe oracle.jdbc.OracleTypes vc consegue obter a referencia a um cursor aberto em uma Stored Procedure com a constante oracle.jdbc.OracleTypes.CURSOR…

e fazendo algo do tipo para obter um ResultSet:

CallableStatement callStmt = conn.prepareCall(...);
...
ResultSet rs =(ResultSet)callStmt.getObject(idxParametroSaida);
Criado 30 de novembro de 2004
Ultima resposta 1 de dez. de 2004
Respostas 4
Participantes 3