我試圖創造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