2012-11-19 29 views
0

APEX版本上填充DB:4.1.1.00.23 例子:http://apex.oracle.com/pls/apex/f?p=27554:51 登錄:演示 PW:演示APEX 4.1 - 基於航天飛機的左側面板

我有一個頁面上穿梭,當我移動項目從右側的左側面板,我想更新數據庫中'零''表'列'分析'

頁面加載時可能有或可能不是右側面板中的項目。

enter image description here

DB table (when page loads): 
Field       Analyst 
Co-Borrower Credit Score  Analyst_1 
Appraised Value    Analyst_1 
Appraisal Identifier   Analyst_1 

然後,當我移動從右側面板中的部分或全部項目的左側面板,點擊「應用更改」,我想「空」被放在分析師田野上數據庫用於左側面板上的每個字段名稱。

enter image description here

DB table (after clicking button): 
Field       Analyst 
Co-Borrower Credit Score  Analyst_1 
Appraised Value    (null) 
Appraisal Identifier   (null) 

這是我當前頁面的過程(後提交):

declare 
    tab apex_application_global.vc_arr2; 
    l_count number; 
begin 
    tab := apex_util.string_to_table (:P51_SHUTTLE); 
    for i in 1..tab.count 
    loop 
    select count(*) into l_count from DQ_MANUAL_EDIT WHERE DQ_ATTRIBUTE = tab(i); 
    if l_count > 0 then 
     UPDATE DQ_MANUAL_EDIT 
     SET DQ_ANALYST = :P51_DQ_ANALYST 
     WHERE DQ_ATTRIBUTE = tab(i); 
    end if; 
    end loop; 
end; 

在此先感謝!

回答

1

沒有進入航天飛機左側。右側有提交的值。因此,只能通過計算數據庫值與提交的值之間的更改來更改這些記錄。
如果可能,請先刪除所有關聯記錄,然後插入新值。

declare 
    tab apex_application_global.vc_arr2; 
    l_count number; 
begin 
    DELETE FROM DQ_MANUAL_EDIT 
    WHERE DQ_ANALYST = :P51_DQ_ANALYST; 

    tab := apex_util.string_to_table (:P51_SHUTTLE); 
    for i in 1..tab.count 
    loop 
    select count(*) into l_count from DQ_MANUAL_EDIT WHERE DQ_ATTRIBUTE = tab(i); 
    if l_count > 0 then 
     INSERT INTO DQ_MANUAL_EDIT (DQ_ANALYST, DQ_ATTRIBUTE) 
     VALUES (:P51_DQ_ANALYST, tab(i)); 
    end if; 
    end loop; 
end; 

如果你不想刪除,並保存記錄,但與NULL值,那麼你可以先更新記錄NULL

declare 
    tab apex_application_global.vc_arr2; 
    l_count number; 
begin 
    UPDATE DQ_MANUAL_EDIT 
    SET DQ_ANALYST = NULL 
    WHERE DQ_ANALYST = :P51_DQ_ANALYST; 

    tab := apex_util.string_to_table (:P51_SHUTTLE); 
    for i in 1..tab.count 
    loop 
    select count(*) into l_count from DQ_MANUAL_EDIT WHERE DQ_ATTRIBUTE = tab(i); 
    if l_count > 0 then 
       UPDATE DQ_MANUAL_EDIT 
       SET DQ_ANALYST = :P51_DQ_ANALYST 
       WHERE DQ_ATTRIBUTE = tab(i); 
    end if; 
    end loop; 
end; 

這會是當您使用最簡單的方法循環結構。

+0

我用你的第二個例子引用'null'。我做的唯一更改是在第一個更新語句中「SET DQ_ANALYST = null」。再次感謝您的幫助。 –

+0

dang,對。這就是我的意思:')爲了子孫後代我會修改。 – Tom

0

取而代之的是循環的,你可以做兩個更新:

UPDATE DQ_MANUAL_EDIT 
    SET DQ_ANALYST = :P51_DQ_ANALYST 
    WHERE DQ_ATTRIBUTE in (select * from tab); 

UPDATE DQ_MANUAL_EDIT 
    SET DQ_ANALYST = NULL 
    WHERE DQ_ATTRIBUTE not in (select * from tab); 

上午我看到它太簡單了?