2017-08-29 80 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