1

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

我不确定如何执行此操作,因为我是 PL/SQL 的新手,并且可能会认为某种包使用游标获取日期,然后使用函数将布尔值返回给过程,然后以某种方式停止 DML 语句开火?

提前致谢

4

2 回答 2

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; 
于 2013-04-13T21:40:01.967 回答
0

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

于 2013-04-14T13:31:43.927 回答