Boa noite pessoal!!!
Eu revirei a web procurando algum exemplo de como tratar o retorno de uma proc que seja um TYPE e não consegui encontrar nenhuma resposta.
Obs. Se a procedure retornar os tipos como CURSOR, VARCHAR o código funciona na boa agora quando tem um TYPE no out da proc da erro de:
java.sql.SQLException: ORA-06550: linha 1, coluna 7:
PLS-00306: número incorreto de tipos de argumentos na chamada para 'P_BUSCAPESSOA_TYPE'
ORA-06550: linha 1, coluna 7:
PL/SQL: Statement ignored
Este erro é por conta de eu estar passando um tipo que não é o esperado.
Neste post teve dicas mais não final não houve uma solução:
http://www.guj.com.br/posts/list/38564.java
Se puderem me ajudar…fico muito agradecido
Abaixo o código que executa a proc
[code]
package br.com.testediverso;
import java.sql.CallableStatement;
import java.sql.Connection;
import br.com.jdbc.ConnectionFactory;
public class Teste1 {
public static void main(String args[]) {
try {
Connection con = ConnectionFactory.getConnection();
CallableStatement call = con.prepareCall("{call P_BUSCAPESSOA_TYPE(?,?)}");
//Seto um valor para clausula where da proc
call.setInt(1, 4);
//Registrar o parametro de retorno
call.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
//Executar proc
call.executeQuery();
//Exibir na tela retorno
System.out.println(call.String(2));
} catch (Exception e) {
e.printStackTrace();
}
}
}[/code]
Mais abaixo o tipo e a procedure
create or replace
type t_lista_numero is table of number(10);
create or replace
PROCEDURE P_BUSCAPESSOA_TYPE (
P_ID IN NUMBER,
P_NUM OUT T_LISTA_NUMERO) IS
BEGIN
BEGIN
SELECT
NUM
BULK COLLECT INTO
P_NUM
FROM
QUA_PESSOA
WHERE
ID = P_ID;
--codigo para visualizar o retorno da proc
BEGIN
for i in P_NUM.first..P_NUM.last loop
dbms_output.put_line('valores: '||to_char(P_NUM(i)));
end loop;
END;
END;
END;