【问题标题】:Insert row in another table when insert in first table by trigger?通过触发器在第一个表中插入时在另一个表中插入行?
【发布时间】:2016-11-11 08:09:44
【问题描述】:

每当我在stud_master 表中插入行时,我都会尝试在stud_report 表中插入一行。为此,我尝试在触发器的帮助下遵循 SQL 代码,但我得到了:

警告:触发器创建时出现编译错误。

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_master 表包含

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

stud_report 表包含

+------------+--------------+----------+
| Field      | Type         | Null?    |
+------------+--------------+----------+
| roll_no    | number       | NOT NULL |
| total      | number       |          |
| percentage | decimal(5,2) |          |
+------------+--------------+----------+

编译错误是:

8/26 PLS-00103:在期待其中一个时遇到符号“)” 以下:
(
9/49 PLS-00103:在期待其中一个时遇到符号“,” 以下:
(
10/7 PLS-00103:预期时遇到符号“文件结尾” 以下之一:
;

【问题讨论】:

  • 我认为你应该设置一个分隔符。请同时发布编译错误。
  • 数字不是 mysql 数据类型。你在使用 oracle 吗?
  • 是的,我正在使用 Oracle 数据库 10G

标签: triggers oracle10g multiple-tables


【解决方案1】:

你并不遥远 - 使用 :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 ;
   /

【讨论】:

  • 感谢您的回答。我的触发器已成功创建,但现在当我在 Stud_master 中插入行时出现错误 ORA-04098: trigger 'SYSTEM.TRGIN' is invalid and failed re-validation
  • 嗯..我测试了它,它对我来说效果很好。你能告诉我你的插入语句吗?
  • insert into stud_master values (141,'David',73,85,91,'Washington');
  • 该错误似乎与名为 TRGIN 的触发器有关,您能否检查它是否存在,如果存在则修复或删除它。
猜你喜欢
  • 1970-01-01
  • 2014-05-22
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多