私は2つの状況では、レコードのテーブルを返すようにしようとしています:無名ブロック を使用して機能 PLS-00222:名「INFO_TYPE」が無い関数は、この範囲内に存在する
-
私はこの関数を使用していますが、すべて正常に動作していますが、私は匿名ブロックに変換しようとしているときに上記のエラーが表示されます。ここ は、コードは次のとおりです。関数の場合
:
create or replace function get_info(p_city varchar2) return info_type_table as l_info info_type_table := info_type_table(); begin for i in (select e.employeeid, e.lastname, c.customerid, c.companyname, o.orderid, o.orderdate from ntw_employees e inner join ntw_orders o on e.employeeid = o.employeeid inner join ntw_customers c on o.customerid = c.customerid where e.city = p_city) loop l_info.extend; l_info(l_info.count) := (info_type(i.employeeid, i.lastname, i.customerid, i.companyname, i.orderid, i.orderdate)); end loop; return l_info; end;
そしてここでは、無名ブロックのためである:
declare type info_type is record ( emp_no number(3), lastname varchar2(26), cust_no varchar2(5), CO_name varchar2(50), orderid number(5), orderdate date ); type info_type_table is table of info_type; l_info info_type_table := info_type_table(); begin for i in (select e.employeeid, e.lastname, c.customerid, c.companyname, o.orderid, o.orderdate from ntw_employees e inner join ntw_orders o on e.employeeid = o.employeeid inner join ntw_customers c on o.customerid = c.customerid where e.city = 'London') loop l_info.extend; l_info(l_info.count) := (info_type(i.employeeid, i.lastname, i.customerid, i.companyname, i.orderid, i.orderdate)); dbms_output.put_line('angajat = ' || i.employeeid); end loop; end;
誰もが、私の無名ブロックで間違っているものを私にしてください説明できますか?
ありがとうございます。
@mikcutu - 再。 'extend'はまだレコードタイプではなく、テーブルタイプに対してです。エラーなしで11gR2の3つのバージョンをすべて実行し、すべて同じ出力を得ました。 –