Oracle 10g触发

时间:2016-05-30 16:28:12

标签: oracle triggers oracle10g

我是Oracle(10g)数据库的新手。

我的问题是我不确定语法,我需要为Oracle数据库重写此触发器:

CREATE OR REPLACE TRIGGER trigger
BEFORE INSERT OR UPDATE
ON table
FOR EACH ROW
BEGIN
    IF :NEW.date > SYSDATE THEN
         RAISE_APPLICATION_ERROR(-20950, 'Error!');
    END IF;
END;

1 个答案:

答案 0 :(得分:0)

你提到你改变了触发器和表格的名称,但是,我会在这里再说一遍(仅为了完整性):

我看到3个错误:

  1. "触发"是保留字。我改为" ctrigger"在下面的例子中。
  2. "表"是保留字。我换成了"垃圾"在下面的例子中。
  3. "日期"是保留字。我改为" cdate"在下面的例子中。
  4. 我现在假设" cdate"是DATE数据类型。
  5. 以下代码正常运行..尝试在您的系统上运行此功能"按原样#34;看看它是否有效?

    如果确实如此,但它仍然在您的桌面上失败,那么我们肯定需要查看您的表的定义以进一步排除故障。

      drop table junk;
    
      create table junk ( id   number,
                          cdate    date );
    
      CREATE OR REPLACE TRIGGER ttrigger
      BEFORE INSERT OR UPDATE
      ON junk
      FOR EACH ROW
      BEGIN
          IF :NEW.cdate > SYSDATE THEN
               RAISE_APPLICATION_ERROR(-20950, 'Error!');
          END IF;
      END;
      /
    

    测试结果如下:

      SQL  > create table junk ( id   number,
                          cdate    date );
        2
      Table created.
    
      Elapsed: 00:00:00.07
      SQL  > CREATE OR REPLACE TRIGGER ttrigger
      BEFORE INSERT OR UPDATE
      ON junk
      FOR EACH ROW
      BEGIN
          IF :NEW.cdate > SYSDATE THEN
               RAISE_APPLICATION_ERROR(-20950, 'Error!');
          END IF;
      END;
      /
    
      Trigger created.
    
      Elapsed: 00:00:00.20
      SQL  > show err
      No errors.
      SQL  >