に即時実行します。OracleのAPEX:私は、次のコードを持っているコレクション
declare
y pls_integer := 0;
v_msg varchar2(4000);
plsql varchar(4000);
begin
if not apex_collection.collection_exists(p_collection_name=>'P16_COLLECTION') then
wwv_flow.debug('No Apex collection found!');
else
for x in (select * from apex_collections where collection_name = 'P16_COLLECTION' and seq_id > 1 order by seq_id)
loop
y := y+1;
FOR i IN 1..25
LOOP
plsql := 'begin apex_collection.update_member_attribute (p_collection_name=> ''P16_COLLECTION'', p_seq=>' || TO_CHAR(x.seq_id) || ',p_attr_number =>' || TO_CHAR(i) || ',p_attr_value=>wwv_flow.g_f' || TO_CHAR(i, 'FM00') || '(' || TO_CHAR(y) || ')); end;';
wwv_flow.debug(plsql);
EXECUTE IMMEDIATE plsql;
END LOOP;
end loop;
end if;
exception when others then
v_msg := ''||sqlerrm;
wwv_flow.debug('ERR: '||v_msg);
end;
をこのコードは1に非常によく似ているがhereを提案したが、私25個の列をループ。 Oracle Apexの問題は、PL/SQLで許可されている文字の最大数です。したがって、私は25 update_member_attribute
- 呼び出しを書くことはできません。
しかし、その代わりに私はエラーno data found
を得ます。
コレクションP16_COLLECTION
が存在することを3回確認しました。
'apex_collection.update_member_attribute'を呼び出すために動的SQLを必要としないので、あなたはそれを避けるべきです。代わりに、 'wwv_flow.g_fnn(y)'の値を取得するのに必要な最小限の動的SQLを最小化してください。さらに、ループを展開し、静的PL/SQLを使用してください。 –