如何从Oracle过程返回关联数组类型输出参数

时间:2019-07-15 19:58:23

标签: arrays oracle plsql associative

我正在尝试执行一个具有关联数组作为out参数之一的过程。我不断收到错误消息,称在调用put_line时参数数量或类型错误。

我试图设置一个具有相同类型的变量,并在返回关联数组的过程的调用中使用它。

DECLARE

P_MESSAGE VARCHAR2(4000);
P_FUSION_CC KPE_COA_VALUE_LOOKUP_PKG.P_FUSION_CC_TBL;
--v_fusion KPE_COA_VALUE_LOOKUP_PKG.P_FUSION_CC_TBL;

BEGIN

KPE_COA_VALUE_LOOKUP_PKG.GET_FUSION_CC('EBS 
COA','001:0069:274000:05045:038:000000',':',P_MESSAGE,P_FUSION_CC); 

DBMS_OUTPUT.PUT_LINE(p_fusion_cc);

END;

我收到此错误PLS-00306:调用“ PUT_LINE”时参数的数量或类型错误

2 个答案:

答案 0 :(得分:2)

为此,在PL / SQL中访问关联数组的键值对或进行打印并非易事,应使用特定的循环序列。

这是一个插图

declare
   type assoc_array_typ is table of varchar2(30) index by varchar2(30);

   l_assoc_array assoc_array_typ;
   l_idx varchar2(30);
begin
   l_assoc_array('First_name')   := 'Narendra';
   l_assoc_array('middle_name')  := 'Damodardas';
   l_assoc_array('Last_name')    := 'Modi';

   ---To print the array
   l_idx := l_assoc_array.first;
   while (l_idx is not null) loop
      dbms_output.put_line('Key = ' || l_idx || ',
                          Value = ' || l_assoc_array(l_idx));
      l_idx := l_assoc_array.next(l_idx);
   end loop;
   ---End printing
end;
/

输出

Key = First_name, Value = Narendra
Key = Last_name, Value = Modi
Key = middle_name, Value = Damodardas


PL/SQL procedure successfully completed.

答案 1 :(得分:1)

减速表示它接受String参数。看起来您正在尝试传递实体数组。你不能那样做。您需要传递数组中的各个元素。

 dbms_output.put_line(p_fusion_cc.column1 || ' ' || p_fusion_cc.column2  ... );