Oracle 如何使用子表触发器填充父表值
具有ID和状态的工单表(父项)。 ID为的子工单,ChildIDOracle 如何使用子表触发器填充父表值,oracle,Oracle,具有ID和状态的工单表(父项)。 ID为的子工单,ChildID 如果子表中有INSERT in数据,我必须将ID、ChildID和status的值填充到一个新表中。我不知道为什么您需要两个表来存储相同的数据,您可以用一个表来完成。如果我理解正确,你需要这样的东西: --Main table CREATE TABLE "WORKORDER" ( "ID" NUMBER(*,0) NOT NULL, "ParentID" NUMBER(*,0), "St
如果子表中有INSERT in数据,我必须将ID、ChildID和status的值填充到一个新表中。我不知道为什么您需要两个表来存储相同的数据,您可以用一个表来完成。如果我理解正确,你需要这样的东西:
--Main table
CREATE TABLE "WORKORDER"
( "ID" NUMBER(*,0) NOT NULL,
"ParentID" NUMBER(*,0),
"Status" VARCHAR2(128 BYTE)
);
--Constraint pk
ALTER TABLE "WORKORDER" ADD (
CONSTRAINT "WORKORDER_PK" PRIMARY KEY ("ID"));
--Sequence
CREATE SEQUENCE "WORK_SEQ"
START WITH 1000
INCREMENT BY 1
NOCACHE
NOCYCLE;
--Trigger for sequence
CREATE OR REPLACE TRIGGER "WORK_ID_TRIGGER"
BEFORE INSERT
ON "WORKORDER"
FOR EACH ROW
BEGIN
SELECT WORK_SEQ.nextval
INTO :new."ID"
FROM DUAL;
END;
--Another table
CREATE TABLE "ANOTHER"
( "ID" NUMBER(*,0) NOT NULL,
"ParentID" NUMBER(*,0),
"Status" VARCHAR2(128 BYTE)
);
--Thirgger on child record inser populate another table.
CREATE OR REPLACE TRIGGER "AFTER_CHILD_INSERT"
AFTER INSERT
ON "WORKORDER"
FOR EACH ROW
BEGIN
IF (:new."ParentID" IS NOT NULL)
THEN
INSERT INTO ANOTHER VALUES
(:new."ID", :new."ParentID", :new."Status");
END IF;
END;