2017-04-01 49 views
0

我曾嘗試使用下面的代碼創建的視圖在甲骨文12C:甲骨文12C試驗引發的看法

CREATE VIEW ConcertView AS 
SELECT a.ConcertNo, a.Concert_Name, a.Price, a.Duration, a.City, b.EventDate, b.Even t_Name 
FROM Concert a,Events b 
WHERE a.ConcertNo = b.ConcertNo 
AND a.ConcertNo != 'CN002' 

視圖創建沒有任何錯誤。然後使用以下代碼在視圖上創建一個觸發器:

CREATE OR REPLACE TRIGGER check_month 
INSTEAD OF DELETE OR INSERT OR UPDATE ON ConcertView 

DECLARE 
    ConcertDate date; 
BEGIN 
    IF (to_char(EventDate, 'DD-MM-YY') = 'JUL') THEN 
     raise_application_error(-20000, 'Concerts cannot be run during JULY'); 
    END IF; 
END; 

Trigger created. 

該觸發器創建時沒有任何錯誤。

我試圖確保音樂會不能在7月份進行。 但觸發器不採取任何行動。任何人都可以讓我知道我做錯了什麼,或者說明如何測試觸發器?

+0

爲什麼視圖,而不是在表上創建觸發器?由於在視圖中不會直接插入或更新,所以觸發器將無法工作(根據我的理解) – Spidey

+0

我在視圖上測試觸發器的原因是因爲可以在任何階段刪除視圖並重新創建如果出現任何問題,通過再次將2個表連接在一起。 – starplus

回答

2

替換了這樣一句話:

對於這一點:

IF to_char(EventDate, 'MON') = 'JUL' 

第一句你是DD-MM-YY與月份的名稱比較的日期格式。第二,你要比較一下這個月的名字。

您可以檢查這裏的DOC: Oracle Doc.

+0

我如何測試觸發器是否在視圖上工作,我是否會在表中插入視圖的方式? – starplus

+0

是的,看看這裏... http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7004.htm#i2064426插入視圖的例子。 – winter

+0

我嘗試了以下方法,但是它使用以下代碼創建了壓縮錯誤: CREATE OR REPLACE TRIGGER check_month INSTEAD OF INSERT ON ConcertView DECLARE date_check EXCEPTION; BEGIN IF to_char(EventDate,'MON')='JUL' THEN raise_application_error(-20000,''在7月期間不能運行音樂會'); END IF; END; – starplus