2011-10-20 209 views
1

我只是想知道如果有人可以幫我開始創建一個trigger創建觸發器

我需要創建檢查某些字符

INSERT聲明觸發

如:

INSERT INTO table 
VALUES('ABC') 

我要檢查插入值有A,然後是B,那麼C.

任何幫助都會很棒。 感謝

+3

您應該先閱讀手冊:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7004.htm。 Oracle手冊頁包含很多很好的示例,可以爲您提供提示 –

+4

如果值不正確會發生什麼?如果你想防止無效數據進入你的數據庫,一個'CHECK'約束將是一個更好的主意。 –

+0

如果您在某些命令中檢查某些字符等,請查看正則表達式:http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm – Ollie

回答

2
create or replace trigger iTableABC 
    before insert 
    on  table 
    for each row 
begin 
    if :new.value = 'ABC' then 
    -- Do what it is you want here 
    end if; 
end; 
/

這會觸發insert之前,檢查值 'ABC'。如果您希望在insert之後觸發它,請進行適當的更改。我們假設表table有一個字段叫做value

+0

謝謝。我已經去了..但是檢查數字時出錯。':new.value

+0

你是否用一個冒號TO_NUMBERing字符串? – Ollie

3

這樣做的最好方法 - 最好的,因爲它是最高性能,最簡單,正確的做法 - 將使用檢查約束。

爲了您的原來的例子可能看起來像這樣的:

alter table t1 
    add constraint t1_col1_ck check (col1 = 'ABC') 
; 

您的評論給的例子是行不通的,因爲你是應用TO_NUMBER函數將字符串是不是數字,因爲它包含了結腸。它應該檢查DATE列的時間元素嗎?如果是這樣,這可能工作:

alter table t1 
    add constraint t1_starttime_ck 
    check ((start_date - trunc(start_date) < 0.5) 
; 

精確的細節取決於要執行這些規則。關鍵是應該儘可能通過約束來執行完整性規則而不是觸發器,這通常是可能的。

+0

謝謝..我想要做的是檢查是否插入'GMT + 12:00'例如有GMT然後+或 - 然後在-12:00和12:00之間:/ –