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:
Postar um comentário