我是PL/SQL
的新手,我試圖通過觸發器進行相當複雜的數據完整性檢查。在INSTERT或UPDATE上的PL/SQL觸發:「:NEW」是NULL =>模棱兩可?
我已經明白如何避免出現問題調用是在同一個表使用觸發器內表時(通過一個臨時的外部表),但我現在面臨一個非常令人興奮的問題:我認爲, ":NEW"
被引用值在我的表AFTER
的更新,但事情並沒有看上去那麼簡單......它被更新爲新值SET
或插入... ...這看起來是NULL
如果已指定什麼,即使更新後相應的字段值爲NOT NULL
......這讓我瘋狂。
我的觸發設置在插入或更新幾個變量時:
CREATE OR REPLACE TRIGGER TRG_INS_UP_INSTRUMENT_EVENT
AFTER INSERT OR UPDATE OF EVENT_ID, DATE_BEGIN,DATE_END,INSTR_ID,TYPE_EVENT_ID ON AIS_INSTRUMENT_EVENT
但是現在......如果已經有與非空字段行,我做了一個
UPDATE AIS_INSTRUMENT_EVENT SET INSTR_ID='642' WHERE EVENT_ID='6479'
我實際上得到一個":NEW.DATE_BEGIN"
這是NULL
...事件認爲也不是舊的或新的值是NULL(因爲我只是沒有更新它)。
我如何能夠區分 - 在我的觸發 - 在沒有新規定的情況下,當DATE_BEGIN
被更新的情況下,並SET
自願NULL
(因此該字段必須保持不變,但不一定空... )。我有許多可能的組合,逐一檢查...
預先感謝您的幫助!
如果你可以提供一個完整的測試用例(例如你的表格和觸發器的DDL以及輸入數據和預期輸出),它將會有所幫助;注意:這不需要成爲你的確切表格(例如,我們不關心列/表格/觸發器被稱爲什麼),但它確實需要重現你試圖解決的問題)。是什麼讓你認爲':new'值爲空? – Boneist