【问题标题】:Trigger Insert in database在数据库中触发插入
【发布时间】:2013-12-27 09:11:46
【问题描述】:
CREATE OR REPLACE TRIGGER no8 BEFORE INSERT ON pegawai FOR EACH ROW 
   BEGIN 
     IF :NEW."gaji" BETWEEN '1000000' AND '3000000' THEN 
         insert into pegawai
              ("no_ktp", "nama", "jenis_kel", "alamat", 
              "tgl_lahir", "gaji", "no_dep")  
         values (:new."no_ktp", :new."nama", :new."jenis_kel", :new."alamat",
                  :new."tgl_lahir", :new."gaji", :new."no_dep"); 
     END IF; 
   END;

  • 我尝试插入此查询,

    插入 pegawai 值 ('20104490002','NELA','2','SIDOARJO','14-AUG-1975','900000','5')

    但它给了我这个错误:

    ORA-04098: trigger 'SYSTEM.VALIDASI' is invalid and failed
    re-validation
    

    请帮帮我..

  • 【问题讨论】:

    • 首先,不要在SYSTEM 模式中创建对象。二、创建触发器时遇到的错误是什么?

    标签: sql oracle triggers insert


    【解决方案1】:

    您不能对作为触发器对象的表在触发器上使用插入语句。主要不是BEFORE。它可能会陷入无限循环。

    如果您尝试更改要在表格中插入的值,您只需更改 :new.FIELD_NAME 上的字段值

    举个例子:

    IF :NEW."gaji" BETWEEN '1000000' AND '3000000' THEN
        --say that you need to change the value of :new."nama" just do:
        :new."nama":= 'new Value';
    end if;
    

    【讨论】:

    • +1,但更准确地说,它不能进入​​无限循环,因为触发器无论如何都不起作用 - 他们会得到“表正在变异”错误。
    • @JeffreyKemp 是的,我知道,那是因为我使用“它可以”:)
    • 在英文中,“it could”表示它有可能做到——但在这种情况下,不可能出现无限循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多