簡體   English   中英

觸發器中的Oracle to_char子查詢

[英]Oracle to_char subquery in Trigger

我有一個具有日期類型屬性(MeetDate)和另一個varchar2類型屬性(WorkWeek)的表(Meeting)。 我正在嘗試使用to_char函數基於MeetDate值執行After觸發器以填充WorkWeek字段。 分別嘗試了以下代碼,它們沒有錯誤地進行編譯,但是當我嘗試使用Null為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;

您只希望觸發器在插入列之前更改其值-並且該列位於同一行,因此不需要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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM