我试图创造cx_oracle其中当一些值插入表格studentTemp表中的值复制称为学生一个简单的触发器。每个表中只有两列,分别是stud_ID和stud_Name。当我尝试使用Cx_oracle触发错误
cur.execute("INSERT INTO studentTemp VALUES(1, 'Bob')")
我收到错误DatabaseError插入在StudentTemp值:ORA-04098:触发器“S12345.INSERT_STUD”是无效的,失败再验证。以下是
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;''')
它的工作
有人可以告诉我如何解决这个问题。谢谢
谢谢。我修正了这个问题,但它仍然得到相同的错误 – Awais
你有没有可能通过SQL Developer连接到数据库?然后你可以直接编译触发器并获得反馈有什么问题 – Pesse