更新和插入时的预言机触发器



我在MySQL中定义了一个表,如下所示。现在我想在预言机中创建这个表。

但是如何将更新触发器转换为预言机呢?

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()
);

举个例子,所以:

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;

触发器可能BEFORE UPDATEAFTER UPDATEINSTEAD。选择您想要的。有关更多信息,请阅读文档 http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7004.htm

从 Oracle 12c 开始,您可以避免在使用标准 SQL 中那样使用 IDENTITY 时使用SEQUENCE

您的问题的解决方案如下

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;

最新更新