:
ln_count := 0;
for recs in (select id_column from t_child where other_column = ls_criteria)
loop
ln_count := ln_count + 1;
lt_results(ln_count);
end loop;
は、カーソルを開くと、リストへのアクセス:リストを移植
TYPE i_array IS TABLE OF t_table.id_column%TYPE INDEX BY PLS_INTEGER;
lt_results i_array;
ln_count pls_integer;
このようなパッケージ:
create or replace package test is
TYPE i_array IS TABLE OF t_child.id_column%TYPE;
procedure run;
end;
create or replace package body test is
procedure run is
lt_results i_array := i_array();
cur sys_refcursor;
begin
for r in (select id_column from t_child where other_column = ls_criteria) loop
lt_results.extend;
lt_results(lt_results.count) := r.id_column ;
end loop;
open cur for
select col_a,
col_b,
col_c
from t_table
where id_column in (select column_value from table(lt_results));
end run;
end;
は前12Cにi_arrayは、データベースにする必要がありますタイプ:
create type i_array is table of varchar2(10); -- For example
あなた自身を作成するのではなく、handy pre-existing collectionSYS.KU$_VCNT
などを使用することができます。
for r in (select id_column from t_child where other_column = ls_criteria) loop
lt_results.extend;
lt_results(lt_results.count) := r.id_column ;
end loop;
このことによって、より効率的に置き換えることができます:
select id_column
bulk collect into lt_results
from t_child where other_column = ls_criteria;
は、最も重要な部分を忘れていた。
はところで、このことに注意してください現在の設定ではORA-01403が指定されています。オープン・カーソル・ラインにデータが見つかりません。私はエラーがwhere句のリストアクセスによって引き起こされていると確信しています。 – wombatatat
バルクコレクトを使用して配列を作成する方がよいでしょう。また、SQLで配列を使用する場合は、スキーマレベルで型を作成する必要があります。つまり、「型の作成または置換...」です。さらに良い点は、なぜアレイを使っているのですか?なぜあなたのcur_refカーソルで 'id_column in(どこからid_columnを選択するの? – Boneist
スティッキングポイントは収集ではありません。リターンカーソルのwhere句でリストを使用しています。 – wombatatat