I want to timestamp all the rows of some tables, whenever they are inserted or updated. Insertion is no problem - just set DEFAULT sysdate - but I'm stuck on updates. I thought I could use a trigger, but I get an error ORA-04091, that the table is mutating - basically I can't trigger an update in a row that is being updated. Fair enough, I guess, but how could I get around this?
You are getting an ORA-4091 table mutating because probably your UPDATE statement in the trigger is causing the entire table to mutate. This is a common mistake by novice programmers. Instead, the trigger approach is good; try writing:
:new.timestamp_column := SYSDATE;This should enter a SYSDATE every time you update the row.
For More Information
- Dozens more answers to tough Oracle questions from Eli Leiba are available here.
- The Best Oracle Web Links: tips, tutorials, scripts, and more.
- Have an Oracle or SQL tip to offer your fellow DBAs and developers? The best tips submitted will receive a cool prize. Submit your tip today!
- Ask your technical Oracle and SQL questions -- or help out your peers by answering them -- in our live discussion forums.
- Ask the Experts yourself: Our SQL, database design, Oracle, SQL Server, DB2, metadata, object-oriented and data warehousing gurus are waiting to answer your toughest questions.