繁体   English   中英

如何在表上创建触发器,为每个插入的行填充 id 与 pl/sql 中序列的值?

[英]How to create a trigger on a table that for each inserted row populates id with value from sequence in pl/sql?

create or replace TRIGGER dept_id_trig

 BEFORE INSERT ON DEPARTMENTS


  FOR EACH ROW

DECLARE

BEGIN

  IF(:NEW.DEPARTMENT_ID IS NULL )

  THEN

   select DEPT_DEPTID_SEQ.nextval INTO :new.DEPARTMENT_ID FROM dual;

  END IF;

END; 

请检查以下触发器。

CREATE OR REPLACE TRIGGER dept_id_trig
  BEFORE INSERT ON DEPARTMENTS
  FOR EACH ROW
DECLARE
BEGIN
    :new.DEPARTMENT_ID := DEPT_DEPTID_SEQ.nextval;
END;

如果您使用的是 Oracle 12c 或更高版本,请在列上使用IDENTITY子句而不是触发器:

CREATE TABLE departments(
  department_id NUMBER(10,0)
                GENERATED ALWAYS AS IDENTITY
                CONSTRAINTS departments__department_id__pk PRIMARY KEY
)

这是在创建新表时由 Oracle 自身生成的触发器:

create or replace TRIGGER dept_id_trig 
BEFORE INSERT ON DEPARTMENTS 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF INSERTING AND :NEW.DEPARTMENT_ID IS NULL THEN
      SELECT DEPT_DEPTID_SEQ.NEXTVAL INTO :NEW.DEPARTMENT_ID FROM SYS.DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;

暂无
暂无

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

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