我在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 UPDATE
、AFTER UPDATE
和INSTEAD
。选择您想要的。有关更多信息,请阅读文档 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;