2013-04-13 24 views
1

我想創建某種觸發器來防止正在編輯的行,如果它是在今天的日期之後(將使用SYSDATE來獲取)。在特定條件下使列只讀only

我不確定如何做到這一點,因爲我是PL/SQL的新手,並且會想到某種類型的包可以使用遊標獲取日期,然後使用函數將布爾值返回到某個程序然後以某種方式停止發射的DML聲明?

在此先感謝

+0

查找觸發器。 –

回答

1

顯然你需要一個日期列作爲你的目標。截斷SYSDATE將給你午夜。因此,如果截斷的SYSDATE大於另一個日期,它至少必須在第二天。

引發應用程序錯誤會導致更新失敗。請注意,如果您要更新多行,則單個故障將回滾所有更改。

create or replace trigger your_trg 
    before update on your_table 
    for each row 
begin 
    if trunc(sysdate) > :old.whatever_date then 
     raise_application_error(-20000, 'It is too late to change this record'); 
    end if; 
end; 
+0

感謝您的回覆我不斷收到 ORA-04079:無效觸發規範 林不知道什麼是語法 更新問題:由於某種原因,甲骨文不喜歡「AS」關鍵字 – user2241161

+0

哎呀,取出AS並再試一次 – APC

+0

這工作完全謝謝你! – user2241161

0

您正在尋找的解決方案是VPD Column masking。 主要用於安全目的,VPD使您能夠爲數據訪問和顯示定義行/列級別規則。