我有以下代码:
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;
这段代码非常类似于提出的here,但我循环了25列。 Oracle Apex的问题是PL / SQL允许的最大字符数,所以我不能只写25个update_member_attribute
- 调用。
但它没有执行它我得到一个错误qazxsw poi。
我三重检查收集no data found
存在。
Oracle Apex的问题是允许PL / SQL的最大字符数
我不确定我是否理解这一说法。它是您使用的PL / SQL。您将本地PLSQL变量声明为VARCHAR2(4000)。你为什么不指定它的最大允许尺寸32767?那会有帮助吗?
此外,说你有NO-DATA-FOUND异常:你确定这段代码提出了它吗?因为,那里没有SELECT语句...你在游标FOR循环中使用的语句不能引发NO-DATA-FOUND;更新。因此,我认为它必须是别的东西。
启用DEBUG,运行页面,并在 - 出现错误时 - 查看调试结果并找到罪魁祸首。