2014-02-21 45 views
0

我遇到了不断变化的触发器问题。触发器的目标是更新文件路径时更改字符串的一部分。这是我到目前为止,它编译得很好。Oracle 11g触发器替换部分文本字符串

CREATE OR REPLACE TRIGGER TAU_ATTACHMENTS 
AFTER UPDATE 
ON ATTACHMENTS 
FOR EACH ROW 
BEGIN 
    IF :new.PATH LIKE 'file://Y:%' THEN 
    UPDATE ATTACHMENTS SET PATH = REPLACE(:new.PATH, 'file://Y:','file://\\MPS7536'); 
    END IF; 
END; 
/

当我做一个更新单行的测试时,我得到了通常的变异表错误。有什么建议?我会非常感激!

回答

0

您显然希望在存储触发器之前修改触发器中列的值。但是,提供的代码正试图更新整个attachments表。您可以修改记录正在被更新这样的值:

CREATE OR REPLACE TRIGGER TAU_ATTACHMENTS 
BEFORE UPDATE 
ON ATTACHMENTS 
FOR EACH ROW 
BEGIN 
    IF :new.PATH LIKE 'file://Y:%' THEN 
    :new.PATH = REPLACE(:new.PATH, 'file://Y:','file://\\MPS7536'); 
    END IF; 
END; 
/

请注意,这应该是BEFORE UPDATE触发。

+0

它的工作完全谢谢你!它总是让我感受到的小事情。 :) – PhelpsK