Stored procedure retorna array de varchar

5 respostas
K

Bom dia Pesssoal!!!

Tenho uma procedure no Oracle8i que me retorna um array de VARCHAR…
Mas quando tento executá-la no Java, me retorna o erro:
Conflito de Tipo de Parâmetro: sqlType=2003

quando executo a linha: stmt.registerOutParameter(2, OracleTypes.ARRAY, OracleTypes.VARCHAR);

Nunca fiz isso com procedure… somente com FUNCTION que me retorna cursor…

Segue abaixo a declaração da package/proc e o código java…

CREATE OR REPLACE PACKAGE pkg_teste IS

TYPE t_nome IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;

PROCEDURE teste_proc (p_in IN VARCHAR2, p_nome OUT t_nome);

END pkg_teste;
/

CREATE OR REPLACE PACKAGE BODY pkg_teste IS

PROCEDURE teste_proc(p_in IN VARCHAR2, p_nome OUT t_nome) IS

BEGIN

p_nome(0) := Nome 1;

p_nome(1) := Nome 2;

END;

END pkg_teste;
/

no método java…

String proc = {call pkg_teste.teste_proc(?,?)};

try {

conn = DBConnectionFactory.getInstance().getConnection();

stmt = (OracleCallableStatement) conn.prepareCall(proc);

stmt.registerOutParameter(2, OracleTypes.ARRAY, OracleTypes.VARCHAR);
stmt.setString(1, "");
		
   stmt.execute();

} catch(… ) {}

Grato

5 Respostas

J

Tente assim:

String seuTipo = "<owner>.t_nome"; stmt.registerOutParameter(2, OracleTypes.ARRAY, seuTipo);

Onde owner deverá ser a conta que você usa no Oracle, dona dos objetos.

K

Juliano,

Dessa maneira não rolou aqui.

Dá o seguinte erro:
modelo de nome inválido: …

Meu t_nome está declarado dentro da package…

J

Aff desculpa, não notei…

Faça um teste criando essa estrutura TYPE t_nome IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER fora da package, direto no banco.

create type t_nome IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
danieldestro

Uma vez usei essa porcaria de Index By Table do Oracle e não rola no JBoss. Tive que mandar o desenvolvedor Oracle trocar para um cursor.

jaboot

Justamente o que eu ia dizer, não tem como você retornar um cursor? Sempre dá certo pra mim.

Passa o erro ORA que dá, ou o erro inteiro do Java. Gostaria de dar uma pesquisada nisso.

Criado 4 de agosto de 2006
Ultima resposta 4 de ago. de 2006
Respostas 5
Participantes 4