通过触发器插入第一个表时,在另一个表中插入行?

时间:2016-11-11 08:09:45

标签: triggers oracle10g multiple-tables

每当我在today = today / 86400000; 表中插入行时,我每次都试图在stud_report表中插入一行。为此,我尝试在触发器的帮助下使用SQL代码,但我得到了:

  

警告:使用编译错误创建触发器。

stud_master

Stud_master表包含

CREATE OR REPLACE TRIGGER trg
      AFTER INSERT ON stud_master
     FOR EACH ROW
    DECLARE
      roll number;
      sum number;
      per decimal(5,2);
   BEGIN
        roll := stud_master.roll_no;
        sum :=  stud_master.sub1+stud_master.sub2+stud_master.sub3;
        per := (0.33*(sum));
        insert into stud_report values (roll,sum,per);
   END;
   /

Stud_report表包含

+---------+--------------+----------+
| Field   | Type         | Null?    |
+---------+--------------+----------+
| roll_no | number       | NOT NULL |
| name    | varchar2(15) |          |
| sub1    | number       |          |
| sub2    | number       |          |
| sub3    | number       |          |
| Address | varchar2(30) |          |    
+---------+--------------+----------+

编译错误包括:

  

8/26 PLS-00103:遇到符号")"当期待其中一个            以下:
           (
  9/49 PLS-00103:遇到符号","当期待其中一个            以下:
           (
  10/7 PLS-00103:遇到符号"文件结束"什么时候期待            以下之一:
           ;

1 个答案:

答案 0 :(得分:0)

你不是那么遥远 - 使用:new而不是表名(我会避免使用sum作为变量名)

create or replace 
TRIGGER trg
      AFTER INSERT 
      ON STUD_MASTER
     FOR EACH ROW

     DECLARE roll NUMBER;
       sumNO NUMBER;
       per decimal(5,2);
    BEGIN
        roll :=  :new.roll_no;
        sumNO:=  :new.sub1+:new.sub2+:new.sub3;
        per  := (0.33*(sumNO));
        --dbms_output.put_line('New roll no '|| roll || ' sum = ' || sumno || ' PER = ' || per);
        insert into stud_report  values (roll,sumNO,per);
   END ;
   /