尝试按索引打印Collection变量时出错

时间:2014-07-31 13:58:26

标签: oracle collections plsql

任何人都可以识别以下代码的错误。特别是第一个dbms_output行。第二个打印很好。但第一个给出了这个错误:

第2行出错 ORA-06550:第15行,第53栏: PLS-00201:标识符' MYCOLL'必须申报 ORA-06550:第15行第1栏: PL / SQL:忽略语句

DECLARE
   CURSOR c1
   IS
      SELECT sub_provider_address_id sub_id, phone, extension
        FROM sub_provider_address;

   TYPE coll_type IS TABLE OF c1%ROWTYPE;
   my_coll   coll_type;
BEGIN
   OPEN c1;

   FETCH c1
   BULK COLLECT INTO my_coll;

dbms_output.put_line(' my_coll first row id has '|| mycoll(1).phone );
dbms_output.put_line(' my_coll now has '|| my_coll.last );

END;

2 个答案:

答案 0 :(得分:1)

您将变量声明为my_coll

my_coll   coll_type;

如果发生了错误,那么您将其称为mycoll

dbms_output.put_line(' my_coll first row id has '|| mycoll(1).phone );

所以你只是缺少一个下划线,它应该是:

dbms_output.put_line(' my_coll first row id has '|| my_coll(1).phone );

答案 1 :(得分:0)

您的coll_type不是关联的数组类型。 你必须使用这样的东西:

TYPE coll_type IS TABLE OF c1%ROWTYPE index by pls_integer;

以此为例:

declare
  cursor c1 is
    select 1 id from dual
  ;
  type coll_type is table of c1%ROWTYPE index by pls_integer;
  l_coll_type coll_type;
begin
  open c1;
  fetch c1 bulk collect into l_coll_type;
  close c1;
  dbms_output.put_line('Output:' || l_coll_type(1).id);
end;

Output:1