【发布时间】: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