Oracle 如何使用子表触发器填充父表值

Oracle 如何使用子表触发器填充父表值,oracle,Oracle,具有ID和状态的工单表(父项)。 ID为的子工单,ChildID 如果子表中有INSERT in数据,我必须将ID、ChildID和status的值填充到一个新表中。我不知道为什么您需要两个表来存储相同的数据,您可以用一个表来完成。如果我理解正确,你需要这样的东西: --Main table CREATE TABLE "WORKORDER" ( "ID" NUMBER(*,0) NOT NULL, "ParentID" NUMBER(*,0), "St

具有ID和状态的工单表(父项)。 ID为的子工单,ChildID


如果子表中有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;