我想了解觸發器是如何工作的以及如何在給定的練習中正確編寫它們。我正在使用SQL Developer與4.2版本的Oracle。觸發Oracle運算符LIKE尊重字符串格式
我有一個表人員與這些領域:'matricule','pmatricule'和'typpers'。
'typpers'是一封顯示該人是學生(E),教授(P)還是其他人(X)的信。 'matricule'是一個3到7個數字的鏈,'matricule'是一個鏈'p',後面跟着一個3到6個數字的鏈。例如:'p145','p123456'。
我想讓我的觸發器檢查'matricule'或'pmatricule'的格式是否有人想要在表PERSON中插入一行時。
CREATE OR REPLACE TRIGGER new_matricule
BEFORE INSERT ON PERSONNE
FOR EACH ROW
DECLARE
new_pmatricule PERSONNE.pmatricule%type;
BEGIN
IF((:NEW.TYPPERS = 'P' OR :NEW.TYPPERS = 'X') AND :NEW.pmatricule NOT LIKE 'p%______') THEN
RAISE_APPLICATION_ERROR(-20100, 'pmatricule format is not good');
END IF;
END;
我的觸發作品,如果我想要插入像「52P」 A「pmatricule」的格式,但它也激活時,我想,如「P145」插入。
我認爲我的語法不夠好,但我找不到適當的語法來做到這一點。
有沒有人有想法?
謝謝您的回答,我看到我的錯,但我想要寫的「P」,然後在最少3個數字和最多6個數字。 對於這種情況,沒有'簡單'語法(沒有使用regex_like())嗎? –
是的,這就是我想到的原因,但它很醜陋。但是你確定'_'只能被數字取代嗎?因爲你說'人物',角色可以是字母或數字。 (抱歉的雙後,但我不能編輯我的第一個答案) –
@MbrMbr。 。 。 '_'可以代替*任何*字符。我認爲答案在這一點上是明確的。 –