【问题标题】:Time constraint on a sql triggersql触发器的时间限制
【发布时间】:2016-03-23 07:22:47
【问题描述】:

我有一个名为employees的表格

create table employees 
(
   eno      number(4) not null primary key, 
   ename    varchar2(30),
   zip      number(5) references zipcodes,
   hdate    date
);

我正在尝试在表上设置一个触发器,该触发器将在 update or delete 之前触发,它将首先检查系统时间以查看时间是否在 12:00-13:00 之间,如果是,它将允许插入,否则阻止。

到目前为止,我的猜测是:

CREATE or REPLACE TRIGGER twelve_one 
BEFORE INSERT or Update ON employees
BEGIN
 IF
  ....
 ELSE
  ....
END;

但不幸的是,这就是我所走的路。有人可以帮我先检索系统时间吗?那么我该如何设置IF ELSE 块呢?最后如何中止事务/插入/更新? 我正在使用 Oracle SQL Developer 4.02.15 非常感谢

【问题讨论】:

    标签: sql oracle11g triggers oracle-sqldeveloper


    【解决方案1】:

    我假设你现在必须声明临时变量来设置时间,然后比较临时变量。

    CREATE OR REPLACE TRIGGER TWELVE_ONE
    BEFORE INSERT OR UPDATE
    ON EMPLOYEES
    FOR EACH ROW
    DECLARE
          V_DATE   VARCHAR2 (10);
    BEGIN
              SELECT TO_CHAR (SYSDATE, 'hh24:mi:ss') INTO V_DATE FROM DUAL;
          IF (V_DATE >= '12:00:01' AND V_DATE < '13:00:00')
              THEN
                  INSERT INTO TABLE .. 
               ELSE
                  UPDATE TABLE...
          END IF;
    END;
    

    【讨论】:

    • 这里需要双呼。
    • 请原谅我的上一条评论。我说可以避免双重通话
    • @Melkikun 我会接受它作为答案,它非常棒!谢谢!但是,如何在这里传递值?我的意思是说我的创建语句是:Insert into employees Values (1, 'someone', 11111, '17-12-2015') 现在时间是 12:30:01。触发器如何在不知道值的情况下执行插入?假设现在时间是 13:00:1。触发器如何停止/阻止插入?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多