Oracle APEX:立即执行收集

问题描述 投票:1回答:1

我有以下代码:

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存在。

plsql oracle-apex execute
1个回答
0
投票

Oracle Apex的问题是允许PL / SQL的最大字符数

我不确定我是否理解这一说法。它是您使用的PL / SQL。您将本地PLSQL变量声明为VARCHAR2(4000)。你为什么不指定它的最大允许尺寸32767?那会有帮助吗?

此外,说你有NO-DATA-FOUND异常:你确定这段代码提出了它吗?因为,那里没有SELECT语句...你在游标FOR循环中使用的语句不能引发NO-DATA-FOUND;更新。因此,我认为它必须是别的东西。

启用DEBUG,运行页面,并在 - 出现错误时 - 查看调试结果并找到罪魁祸首。

© www.soinside.com 2019 - 2024. All rights reserved.