Oracle RPC arrays

Unsupported feature

Oracle RPC does not support arrays.

Workaround

Convert the array to a string and use the string instead of the array.

For example, the following stored procedure has an array IN parameter and an array OUT parameter. As a workaround, use varchar to replace both the IN and OUT parameters.

Assembly the IN parameter in the PowerScript:

ls_outparam = space(30) 
ls_inparam = '123;456'

The INI parameter will be split in the stored procedure. Do the same for the OUT parameter.

PROCEDURE pro_arrNum( 
                in_arrParamNum in usertype_number,
                out_arrParamNum out usertype_number
                ) 
AS
BEGIN
    out_arrParamNum(1) :=  in_arrParamNum(1) ;
    out_arrParamNum(2) :=  in_arrParamNum(2);
   
END pro_arrNum;

procedure pro_arrNumTostr( 
                in_varchar in varchar,
                out_varchar out varchar
                ) 
AS
ls_resstr varchar(30); 
ls_desstr varchar(30); 
li_pos int;
BEGIN
    li_pos := 1;
    ls_resstr := in_varchar;
    while li_pos > 0 and length(ls_resstr) > 0 loop
        li_pos := instr(in_varchar, ';', 1);
        if li_pos > 0 then
            ls_desstr := ls_desstr || ';' || substr(ls_resstr, 1, li_pos - 1) ;
            ls_resstr := substr(ls_resstr, li_pos + 1);
        end if;
    end loop;
    out_varchar := ls_desstr;
    ls_desstr := ls_desstr || ';' || '999';
END pro_arrNumTostr;

PowerScript:

int li_pos, li_index
string  ls_inparam, ls_outparam, ls_return, ls_value
long ll_outarrparam[]

ls_outparam = space(30) 
ls_inparam = '123;456'

gtr_trans.pro_arrNumTostr(ls_inparam, ref ls_outparam)

li_pos = 1
mle_1.text = ''

ll_outarrparam = wf_formatstring(ls_outparam)


public function any wf_formatstring (string as_value);int li_pos, li_index
string  ls_value, ls_return
long ll_foramtvalue[]
li_pos = 1

do while len(as_value)  > 0 and li_pos >  0
        li_pos = pos(as_value,  ";")
        ls_value = mid(as_value,1,  li_pos -1)
        if IsNumber (ls_value)  then
                 li_index++
                 ll_foramtvalue[li_index] = Integer(ls_value)
        end if
        as_value =  mid(as_value, li_pos+1)
loop

if IsNumber (as_value)  then ll_foramtvalue[li_index+1] = Integer(as_value)

return ll_foramtvalue
end function