在特定条件oracle上使列只读

时间:2013-04-13 18:52:54

标签: oracle plsql

我正在尝试创建某种触发器,以防止正在编辑的行,如果它在今天的日期之后(将使用SYSDATE来获取)。

我不确定如何执行此操作,因为我是PL / SQL的新手,并且可能会想某些使用游标获取日期的包然后使用函数将布尔值返回到过程然后以某种方式停止来自解雇的DML声明?

提前致谢

2 个答案:

答案 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; 

答案 1 :(得分:0)

您正在寻找的解决方案是VPD Column masking。 主要用于安全目的,VPD使您可以定义数据访问和显示的行/列级别规则。