简体   繁体   English

oracle 在更新和插入时触发

[英]oracle trigger on update and on insert

I have a table defined in MySQL as following.我在 MySQL 中定义了一个表,如下所示。 Now I want to create this table in oracle.现在我想在 oracle 中创建这个表。

But how can I convert on update trigger in to oracle?但是如何将更新触发器转换为 oracle?

create table test(
    userid  INTEGER(10) NOT NULL AUTO_INCREMENT,
    CONSTRAINT PRIMARY KEY  (userid),
    fullname VARCHAR(200) NOT NULL,
    email VARCHAR(50) NOT NULL,
    createdat DATETIME NOT NULL DEFAULT NOW(),
    updatedat DATETIME ON UPDATE NOW()
);

For a example, so:举个例子,所以:

CREATE TABLE test
(
      userid    INTEGER PRIMARY KEY
    , fullname  VARCHAR2(200) NOT NULL
    , email     VARCHAR2(50) NOT NULL
    , createdat DATE DEFAULT CURRENT_DATE NOT NULL
    , updatedat DATE
);

CREATE SEQUENCE test_seq START WITH 1 INCREMENT BY 1;

CREATE OR REPLACE TRIGGER test_insert
  BEFORE INSERT
  ON test
  FOR EACH ROW
BEGIN
  SELECT test_seq.NEXTVAL
   INTO :new.userid
    FROM DUAL;
END;

CREATE OR REPLACE TRIGGER test_update
  BEFORE UPDATE
  ON test
  FOR EACH ROW
BEGIN
  SELECT CURRENT_DATE
    INTO :new.updatedat
    FROM DUAL;
END;

Triggers may BEFORE UPDATE , AFTER UPDATE , and INSTEAD .触发器可以是BEFORE UPDATEAFTER UPDATEINSTEAD Choose that you want.选择你想要的。 For more information read docs http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7004.htm有关更多信息,请阅读文档http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7004.htm

Since Oracle 12c, you can avoid using SEQUENCE in using IDENTITY as done in standard SQL.从 Oracle 12c 开始,您可以避免在使用IDENTITY使用SEQUENCE ,就像在标准 SQL 中所做的那样。

The solution to your problem is following您的问题的解决方案如下

CREATE TABLE test
    ( userid    INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
    , fullname  VARCHAR2(200) NOT NULL
    , email     VARCHAR2(50) NOT NULL
    , createdat DATE DEFAULT CURRENT_DATE NOT NULL
    , updatedat DATE
    );

CREATE OR REPLACE TRIGGER test_update
  BEFORE UPDATE
  ON test
  FOR EACH ROW
BEGIN
  SELECT CURRENT_DATE
    INTO :new.updatedat
    FROM DUAL;
END;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM