【问题标题】:Cx_oracle trigger errorcx_oracle 触发错误
【发布时间】:2017-09-10 07:02:27
【问题描述】:

我试图在 cx_oracle 中创建一个简单的触发器,当在表 studentTemp 中插入一些值时,它会复制名为 Student 的表中的值。每个表中只有两列,即 stud_ID 和 stud_Name。当我尝试使用

在 StudentTemp 中插入值时
cur.execute("INSERT INTO studentTemp VALUES(1, 'Bob')")

我收到错误DatabaseError: ORA-04098: trigger 'S12345.INSERT_STUD' is invalid and failed re-validation。以下是代码

cur.execute('''CREATE OR REPLACE TRIGGER insert_Stud
            AFTER INSERT ON studentTemp
            FOR EACH ROW
            BEGIN
                 INSERT INTO Student(Stud_ID,Stud_Name) VALUES 
                 (:new.Stud_ID, :new.Stud_Name);
            END;''')

我也试过

cur.execute('''CREATE OR REPLACE TRIGGER insert_Stud
            AFTER INSERT ON studentTemp
            REFERENCING NEW AS new
            FOR EACH ROW
            BEGIN
                 INSERT INTO Student(Stud_ID,Stud_Name) VALUES (:new.Stud_ID, :new.Stud_Name);
            END;/''')

但还是出现同样的错误

如果我使用这样的存储过程,我可以让它工作

# create insertStudent() stored procedure
cur.execute('''CREATE OR REPLACE PROCEDURE insertStudent(
                sID IN STUDENT.STUDENT_ID%TYPE,
                sName IN STUDENT.STUDENT_NAME%TYPE)
            IS
            BEGIN
                 INSERT INTO STUDENT VALUES(sID, sName);
            END;''')

# create insert_Stud() trigger
cur.execute('''CREATE OR REPLACE TRIGGER insert_Stud
            AFTER INSERT ON studentTemp
            FOR EACH ROW
            BEGIN
                 insertStudent(:new.Stud_ID, :new.Stud_Name);
            END;''')

谁能告诉我如何解决这个问题。谢谢

【问题讨论】:

    标签: oracle python-3.x cx-oracle


    【解决方案1】:

    在我看来,您在命名学生表字段时有错误。

    在您的过程中,列被引用为

    STUDENT.STUDENT_ID
    STUDENT.STUDENT_NAME
    

    在您的触发器中,您调用它们

    INSERT INTO Student(**Stud_ID**,**Stud_Name**) VALUES ...
    

    【讨论】:

    • 谢谢。我修复了它,但它仍然得到同样的错误
    • 您是否可以使用 SQL Developer 连接到数据库?然后,您可以直接编译触发器并获得反馈有什么问题
    【解决方案2】:

    尝试使用 SQL*Plus 创建触发器。然后使用“显示错误”命令查看问题所在。之后,您应该可以毫无困难地使用 cx_Oracle。唯一的区别是 SQL*Plus 中的尾随 / 不需要。

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 1970-01-01
      • 2019-09-08
      • 2012-01-24
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多