terça-feira, maio 16, 2006

PowerBuilder – Problemas ao retornar valores por output no Oracle

PowerBuilder : 9.0.3 Build 8004
Oracle : 8.1.7.4
Forma de conexão : API O84 Oracle8/8i (8.x.4+)

Recentemente estava tendo erro ao retornar valores VARCHAR2 como OutPut de uma procedure. A definição da minha procedure era :

create or replace PROCEDURE SP_GERA_XML_POS
(p_numcdc cconta.numcdc_cad%type,
p_CodAgente varchar2,
p_CodEmpresa Number,
p_retorno_xml out varchar2) As ...........


No PowerBuilder, criei um UserObject do tipo Transaction e criei uma External Function apontando para o procedure, da seguinte forma:

subroutine SP_GERA_XML_POS(double P_NUMCDC,string P_CODAGENTE,long P_CODEMPRESA,ref string P_RETORNO_XML) RPCFUNC ALIAS FOR "SP_GERA_XML_POS"

Chamei a procedure utilizando seguinte código :

sqlca.sp_gera_xml_pos( 444, 'zzz', 10, xmlretorno)

if sqlca.sqlcode <> 0 then
xmlretorno = sqlca.sqlerrtext
end if

messagebox('teste',xmlretorno)

Este código me retornava a mensagem :
ORA-06502: PL/SQL: numeric or value error: character string buffer too small

Para resolver o problema, descobri que tenho que inicializar a variável que será utilizada para receber o retorno. Como o Oracle possui um limite de 4000 caracteres, alterei o meu código para ficar da seguinte forma:

xmlretorno = space(4000)

sqlca.sp_gera_xml_pos( 444, 'zzz', 10, xmlretorno)

if sqlca.sqlcode <> 0 then
xmlretorno = sqlca.sqlerrtext
end if

messagebox('teste',xmlretorno)

Desta forma, o problema foi solucionado.

Nenhum comentário: