2016-04-30 156 views
0

说我有这样的事情:Oracle触发器更新与Where子句

UPDATE my_table set col2 = '5' where col1 = '111'; 
UPDATE my_table set col2 = '5' where col3 = '112'; 

现在我更新触发之前进行,我想知道在UPDATE语句中使用的列(即COL1,COL3)。换句话说,我可以看到触发器中使用的确切更新语句吗?这可能吗 ?

谢谢!

+0

不清楚你想达到什么。触发器的作用是什么?上面的更新是否在触发器中? – Hawk

+0

请参阅http://stackoverflow.com/questions/13135295/plsql-new-and-old – trincot

+0

您是否想知道列字段或分配给列的值?对于第二种情况,使用NEW和OLD指针可以在更新之前和更新之后获取值。但我不认为你可以在触发器内动态获取列名。 –

回答

0

不,你不能。触发器不知道导致其执行的语句。

+0

好的,你能否告诉我一些事情,当然,如果你知道的话。我必须创建一个日志表(两列,一个日期和小时,另一个操作,如我的情况更新)。在创建这个日志表之后,我必须将旧版本的my_table更新为当前版本(换句话说,要准确知道更新是由哪个版本创建的),当然是按照时间顺序(这很简单)。如果我的触发器无法知道应用了哪个更新,则难以应用这些更改。 – penguina

+0

触发器知道进行了哪些更新,因为它具有伪造的记录'new'和'old',您可以在其中看到所做的更改('old.colx'不等于'new.colx')以及记录的主要,因为这也在那些记录中。它只是不知道导致更新的确切语句,但为什么要这样呢?你会从这些信息中获得什么?触发器对每一行都执行,所以'UPDATE my_table set col2 ='5'其中col1 ='111'可以更新三行,触发器将被调用三次。所以你可以使用三个主键写三个更新。 –

+0

好的,但是我必须在我的日志表的第二列写什么信息?做完这张桌子后,我必须更新旧版本。我不明白。 – penguina