0

我有一个带有日期类型属性 (MeetDate) 和另一个 varchar2 类型属性 (WorkWeek) 的表 (会议)。我正在尝试使用 to_char 函数根据 MeetDate 值执行 After 触发器以填充 WorkWeek 字段。分别尝试了以下代码,它们编译时没有错误,但是当我尝试使用 Null for WorkWeek 插入一行时,它给了我一个“变异触发器/函数可能看不到它”错误。我在这里做错了什么?提前感谢任何帮助。

--Code 1
Create or Replace Trigger Update_WorkWeek
After Insert On Meeting
For Each Row
Begin
Update Meeting
Set WorkWeek  = (Select to_char(:new.MeetDate, 'YYYY IW') From Dual)
Where MeetID = :new.MeetID;
End;
/
show Errors;

--Code 2
Create or Replace Trigger Update_WorkWeek
After Insert On Meeting
For Each Row
Begin
if :New.WorkWeek is Null then
Update Meeting
Set WorkWeek  = (Select to_char(:new.MeetDate, 'YYYY IW') From Dual)
Where MeetID = :new.MeetID;
End if;
End;
/
show Errors;
4

1 回答 1

1

您只需要一个触发器在插入之前更改列的值- 它位于同一行,因此您不需要 UPDATE:

Create or Replace Trigger Update_WorkWeek
BEFORE Insert On Meeting
For Each Row
Begin
  :new.WorkWeek := to_char(:new.MeetDate, 'YYYY IW');
End;
/
show Errors;

如果 MeetDate 发生更改,您可能希望该列保持最新,即:

Create or Replace Trigger Update_WorkWeek
BEFORE Insert
    OR Update OF MeetDate
On Meeting
For Each Row
Begin
  :new.WorkWeek := to_char(:new.MeetDate, 'YYYY IW');
End;
/
show Errors;
于 2013-05-01T05:12:38.447 回答