2012-10-18 135 views
0

我正在使用Oracle Forms Builder,並且我有一個包含多個記錄的塊。該代碼看起來有點像這樣以oracle形式插入記錄

first_record; 
IF NAME_IN('SYSTEM.LAST_RECORD') != 'TRUE' THEN         
    LOOP     
    IF name_in('QOTLNDET_LINES.SERIAL_NUMBER') IS NOT NULL THEN       
     QOTLNDET_LINES_REMOVE.Delete_Row; 
     clear_record;  
    ELSE      
     next_record; 
    END IF; 
    EXIT WHEN NAME_IN('SYSTEM.LAST_RECORD') = 'TRUE'; 

    END LOOP; 
    execute_query; 
    COMMIT; 
    go_block('QOTHDDET_MAIN'); 
END IF; 

的next_record之前對,ELSE段裏面,我需要刪除當前記錄,然後重新插入。問題不在於刪除記錄,而是重新插入記錄。有任何想法嗎?提前致謝。

+0

爲什麼你想這樣做奇怪的事情,而只是做一個更新? – APC

+0

我不確定更新是否會更新依賴字段...但如果更新確實如此,請告訴我如何執行更新:P – Nacho321

回答

2

我同意APC,而不是重新插入記錄,這意味着刪除並再次插入,更簡單的方法是更新DB(或非數據庫)塊中的字段。類似的東西 -

Go_Block('Block_B1'); 
Last_Record; 
L_num_records := :system.cursor_record; 
FOR i in 1..L_num_records 
LOOP  
    Go_Block('Block_B1'); 
    Go_Record(i); 
    --update the fields in the row 
    :Block_B1.item1 := 'Set your value'; 
    :Block_B1.item2 := 'Set your value'; 
    ... 
    ... 
    Next_Record; 
END LOOP; 
First_Record; 
+0

該塊爲QOTLNDET_LINES,該項目爲INVENTORY_ITEM ...我是這樣做: :QOTLNDET_LINES.INVENTORY_ITEM ='abc'但我不斷收到錯誤。 – Nacho321

+1

@ Nacho321:你現在可以做的最重要的事情就是閱讀錯誤信息。或者你想讓我們猜測你遇到了什麼錯誤?這可能很有趣... –

0

我同意APC和Annjawn的更新似乎是正確的方法。在查看你的代碼時,似乎你在一個pll庫中有你的代碼。這是當你使用name_in()而不是直接引用該項目時。如果這是真的,那麼意味着在爲該項目分配值時自然不能使用直接引用。相反,你必須使用copy()。這是一段時間,因爲我已經使用name_in()和複印件(),但這樣的事情應該工作:

IF NAME_IN('SYSTEM.LAST_RECORD') != 'TRUE' THEN         
    LOOP     
    IF name_in('QOTLNDET_LINES.SERIAL_NUMBER') IS NOT NULL THEN       
     QOTLNDET_LINES_REMOVE.Delete_Row; 
     clear_record;  
    ELSE   
     Copy('new value', 'QOTLNDET_LINES.INVENTORY_ITEM'); 

     next_record; 
    END IF; 
    EXIT WHEN NAME_IN('SYSTEM.LAST_RECORD') = 'TRUE'; 

    END LOOP; 
    execute_query; 
    COMMIT; 
    go_block('QOTHDDET_MAIN'); 
END IF;