2017-08-29 81 views
0

我使用的是PL/SQL程序,以插入先前生成到另一个exisiting表中的一个表:Oracle APEX PL/SQL过程调试?

INSERT INTO REI_LABOUR_COST (DEALER_NUMBER, DEALER_STATUS, BILLING_PARTNER, BSI_GW, YEAR, QUANTITY_FRU, LABOUR_EUR, LABOUR_LOCAL, REQUESTED_RATE) 
select c001 as DEALER_NUMBER 
    , c002 as DEALER_STATUS 
    , c003 as BILLING_PARTNER 
    , c004 as BSI_GW 
    , c005 as YEAR 
    , c006 as QUANTITY_FRU 
    , c007 as LABOUR_EUR 
    , c008 as LABOUR_LOCAL 
    , c009 as REQUESTED_RATE 
from apex_collections col 
where collection_name = 'COLLECTION' and seq_id != 1 
order by seq_id; 

但它不工作。程序失败时没有错误消息或其他符号,但在最终表中不显示任何结果。

第一个问题,有没有什么迹象我做错了?

第二个问题,如果命令失败,我会在哪里看到错误消息?我可以在某个地方启用它吗?

+0

你得到只是运行了'SELECT'部分东西后? – justiceorjustus

+0

是的,我喜欢。一切都按照我的计划进行。它会自己转换错误的类型吗?像数字到varchar或其他方式,鉴于字符形成一个有效的数字? –

+0

如果您删除了所有列别名,它是否工作?你不需要插入它们,但我不知道它是否会导致插入。 – justiceorjustus

回答

0

在将插入插入数据库之前,必须为每个成员属性更新apex集合。

第一顶点的过程:在提交和计算之前

declare 
    y pls_integer := 0; 
    v_msg varchar2(4000); 
begin 
    if not apex_collection.collection_exists(p_collection_name=>'COLLECTION') then 
     wwv_flow.debug('No Apex collection found!'); 
    else 
     for x in (select * from apex_collections where collection_name = 'COLLECTION' and seq_id != 1 order by seq_id) 
     loop 
      y := y+1; 
      apex_collection.update_member_attribute (p_collection_name=> 'COLLECTION', p_seq=> x.seq_id,p_attr_number =>1,p_attr_value=>wwv_flow.g_f01(y));  
      apex_collection.update_member_attribute (p_collection_name=> 'COLLECTION', p_seq=> x.seq_id,p_attr_number =>2,p_attr_value=>wwv_flow.g_f02(y)); 
      apex_collection.update_member_attribute (p_collection_name=> 'COLLECTION', p_seq=> x.seq_id,p_attr_number =>3,p_attr_value=>wwv_flow.g_f03(y)); 
      apex_collection.update_member_attribute (p_collection_name=> 'COLLECTION', p_seq=> x.seq_id,p_attr_number =>4,p_attr_value=>wwv_flow.g_f04(y)); 
      apex_collection.update_member_attribute (p_collection_name=> 'COLLECTION', p_seq=> x.seq_id,p_attr_number =>5,p_attr_value=>wwv_flow.g_f05(y)); 
      apex_collection.update_member_attribute (p_collection_name=> 'COLLECTION', p_seq=> x.seq_id,p_attr_number =>6,p_attr_value=>wwv_flow.g_f06(y)); 
      apex_collection.update_member_attribute (p_collection_name=> 'COLLECTION', p_seq=> x.seq_id,p_attr_number =>7,p_attr_value=>wwv_flow.g_f07(y)); 
      apex_collection.update_member_attribute (p_collection_name=> 'COLLECTION', p_seq=> x.seq_id,p_attr_number =>8,p_attr_value=>wwv_flow.g_f08(y)); 
      apex_collection.update_member_attribute (p_collection_name=> 'COLLECTION', p_seq=> x.seq_id,p_attr_number =>9,p_attr_value=>wwv_flow.g_f09(y)); 
     end loop; 
    end if; 
exception when others then 
    v_msg := ''||sqlerrm; 
    wwv_flow.debug('ERR: '||v_msg); 
end; 

第二顶点处理:提交

declare 
    v_msg varchar2(4000); 
begin 
    for x in (select * from apex_collections where collection_name = 'COLLECTION' and seq_id != 1 order by seq_id) 
    loop    
     begin 
      INSERT INTO REI_LABOUR_COST (DEALER_NUMBER, DEALER_STATUS, BILLING_PARTNER, BSI_GW, YEAR, QUANTITY_FRU, LABOUR_EUR, LABOUR_LOCAL, REQUESTED_RATE) 
      values(x.c001, x.c002, x.c003, x.c004, x.c005, x.c006, x.c007, x.c008, x.c009); 
     exception when others then 
      v_msg := ''||sqlerrm; 
      wwv_flow.debug('ERR_1: '||v_msg);     
     end; 
    end loop; 
exception when others then 
    v_msg := ''||sqlerrm; 
    wwv_flow.debug('ERR_2: '||v_msg); 
end; 
+0

你能解释为什么我需要更新集合吗?为什么第一个过程在提交和第二个过程之后提交?此外,我没有在下拉选择中看到“提交”,只有“提交”,“处理”和其他一些内容。 –

+0

收集数据由用户手动修改时非常有用。我使用Apex 4.2,我有“提交”和“计算前”。 – Iulian

+0

噢,我使用Apex 5,可能就是这样。任何想法,我应该选择呢? –

-1

我不认为你可以像这样引用seq_id。

使用APEX_COLLECTION.DELETE_MEMBER摆脱seq_id 1.

例如中

BEGIN 

APEX_COLLECTION.DELETE_MEMBER(
p_collection_name => 'COLLECTION', 
p_seq => '1'); 

END; 

然后照常继续。

编辑 - 它将失败的原因是错误的数据类型错误。如果你检查调试器,你应该可以看到这个。

+0

调试器?哪里? –

+0

另外,它在没有INSERT部分的情况下工作,即使头部被隐藏,因为我想。 –

+0

调试器位于工具栏中间的屏幕底部。 – RLOG