要求:实现row database triggers来使表格Part里面的total与表格里OrderLine的信息一致。
CREATE TABLE Part(   /* Part description         */ 
PNumber NUMBER(10) NOT NULL, /* Number */ 
PName VARCHAR(30) NOT NULL, /* Name         */ 
PManufacturer VARCHAR(255) NOT NULL, /* Manufacturer   */ 
PPrice NUMBER(7,2) NOT NULL, /* Price */ 
PRating VARCHAR(10)     NULL, /* Rating */ 
Total           NUMBER(6)       NULL,     /*Total number*/  
CONSTRAINT Part_pkey PRIMARY KEY( PNumber ), 
CONSTRAINT Part_fkey1 FOREIGN KEY( PRating ) 
); 
CREATE TABLE Orders(   /* Order description */ 
ONumber NUMBER(10) NOT NULL, /* Number */ 
ODate DATE NOT NULL, /* Date when issued */ 
OCustomer VARCHAR(255) NOT NULL, /* Customer involved */ 
CONSTRAINT Orders_pkey PRIMARY KEY( ONumber ) 
); 
CREATE TABLE OrderLine(   /* Ordered parts */ 
LOrder NUMBER(10) NOT NULL, /* Order number */ 
LLine NUMBER(3) NOT NULL, /* Line number */ 
LPart NUMBER(10) NOT NULL, /* Part number */ 
LQuantity NUMBER(6) NOT NULL, /* Quantity */ 
CONSTRAINT OrderLine_pkey PRIMARY KEY( LOrder, LLine ), 
CONSTRAINT OrderLine_fkey1 FOREIGN KEY( LPart ) 
REFERENCES Part( PNumber ), 
CONSTRAINT OrderLine_fkey2 FOREIGN KEY( LOrder ) 
REFERENCES Orders( ONumber ) 
); 

解决方案 »

  1.   

    没写业务规则啊  兄弟是insert ,update ,还是delete操作时候
      

  2.   

    兄弟,不好意思,也许我没写清楚,我重新写一下。
    1)如果Total = 0, then NULL
    2) 如果Total > 0和<=100, then 'RARE'
    3) 如果Total > 100和<=1000, then 'NORMAL'
    4) ELSE then 'FREQUENT'描述:implement the database triggers that enforce the consistency constraint listed above when information about the parts ordered by a customer is entered into the database and when information about a new part is added to a database.Then implement SQL script that comprehensively tests the triggers implemented in last step.拜托大家了。
      

  3.   

    基于这个case,再追加请教大家一个问题,因为建了一个view之后,不能直接插入,要建个trigger才可以,大家有办法吗? (i)Implement SQL script that adds to the database information about the total number
    of units of each part ordered by the customers so far and that sets a correct value of
    the total number of ordered units for each part immediately after the execution of a script a2create.sql.
    (ii)  Implement  the  row  database  triggers  that  keep  the  total  number  of  ordered  units consistent with information included in a relational table OrderLine.
    (iii) Implement  SQL  script  that  comprehensively  tests the  triggers implemented  in  step
      

  4.   

    上面写错了一点,建了一个view之后,不能直接插入,要建个trigger才可以,请教高手。
    (i)   Implement  SQL  statement that  creates  a  relational  view  VFLine(VONumber, VLNUmber, VPNumber, VPName, VQuantity) that  contains  information about  the  parts  (VPNumber, VPName)  frequently  ordered  by  the  customers, order numbers (VONumber), line numbers (VLNUmber), and quantities
    (VQuantity).
     
    (ii)  Implement a database trigger that allows for the insertions of data into the relational view VFLine and later on into the database. If an insertion is not related to a part frequently ordered by the customers then such insertion should be rejected.
    (iii) Implement SQL script that comprehensively tests a trigger implemented in step (ii).
      

  5.   

    要求:实现row database triggers来使表格Part里面的total与表格里OrderLine的信息一致。 CREATE TABLE Part(   /* Part description         */  
    PNumber NUMBER(10) NOT NULL, /* Number */  
    PName VARCHAR(30) NOT NULL, /* Name         */  
    PManufacturer VARCHAR(255) NOT NULL, /* Manufacturer   */  
    PPrice NUMBER(7,2) NOT NULL, /* Price */  
    PRating VARCHAR(10)     NULL, /* Rating */  
    Total           NUMBER(6)       NULL,     /*Total number*/   
    CONSTRAINT Part_pkey PRIMARY KEY( PNumber ),  
    CONSTRAINT Part_fkey1 FOREIGN KEY( PRating )  
    );  
    CREATE TABLE Orders(           /* Order description */  
      ONumber NUMBER(10) NOT NULL,    /* Number */  
      ODate DATE NOT NULL,        /* Date when issued */  
      OCustomer VARCHAR(255) NOT NULL, /* Customer involved */    CONSTRAINT Orders_pkey PRIMARY KEY( ONumber )  
    );  CREATE TABLE OrderLine(                   /* Ordered parts */  
        LOrder NUMBER(10) NOT NULL,           /* Order number */  
        LLine NUMBER(3) NOT NULL,             /* Line number */  
        LPart NUMBER(10) NOT NULL,            /* Part number */  
        LQuantity NUMBER(6) NOT NULL,         /* Quantity */      CONSTRAINT OrderLine_pkey PRIMARY KEY( LOrder, LLine ),  
        CONSTRAINT OrderLine_fkey1 FOREIGN KEY( LPart ) REFERENCES Part( PNumber ),  
        CONSTRAINT OrderLine_fkey2 FOREIGN KEY( LOrder )  REFERENCES Orders( ONumber )  
    ); 
      

  6.   

    由于在ORACLE里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。 
    INSTEAD OF 选项使ORACLE激活触发器,而不执行触发事件。只能对视图和对象视图建立INSTEAD OF触发器,而不能对表、模式和数据库建立INSTEAD OF 触发器。 
    CREATE OR REPLACE TRIGGER emp_view_delete 
       INSTEAD OF DELETE ON emp_view FOR EACH ROW 
    BEGIN 
       DELETE FROM emp WHERE deptno= :old.deptno; 
    END emp_view_delete;