我在mysql db中有幾百個觸發器,我正在遷移到Oracle db。有一個聲明,我看到很多,我沒有能夠在oracle中找到相同的一個。Oracle等效於MySQL代碼「insert into dummy」以返回錯誤消息
INSERT INTO $some_kind_of_message._BD_TRIGG$ (dummy) VALUES (value);
我也看到了這個過程和函數,它似乎「迴歸」的消息給誰調用的程序(我認爲)的aplication。我在兩種RDBMS中都有新的功能,但我已經與oracle一起工作了幾個月。
是否有一個等效的語句來取代oracle中的mysql?非常感謝。
編輯:
這是許多的例子觸發。這一個用於登錄驗證。 我不太確定oracle的觸發器語法,但現在不是問題所在。 'case'部分仍然是mysql語法。我還沒有能夠找到信息在MySQL和Oracle文檔。這不是一個正常的插入,它是某種返回消息 MySQL使用(多數民衆贊成我猜),我也看到它的功能和程序。 ¿我如何將它替換爲oracle來執行相同的任務?
CREATE OR REPLACE TRIGGER adduser
BEFORE INSERT
ON tbl_users
FOR EACH ROW
DECLARE flag INTEGER;
begin
flag := 1;
/* validate login */
IF(LENGTH(TRIM(:NEW.login)) < 4) THEN
flag := -1;
END IF;
/* valido clave */
IF(flag = 1) THEN
IF(LENGTH(:NEW.clave) < 3) THEN
flag := -2;
END IF;
END IF;
CASE flag
WHEN -1 THEN INSERT INTO $login_less_then_4_characters._BD_TRIGG$ (dummy) VALUES ('error');
WHEN -2 THEN INSERT INTO $pass_less_then_5_characters._BD_TRIGG$ (dummy) VALUES ('error');
ELSE flag := 0;
END CASE;
END;
我不相信,一個Oracle觸發器可以返回一個值。如果它拋出一個將被返回的異常。如果你想創建事務表或者其他類型的東西,你總是可以從觸發器內插入另一個表。 – jfin3204 2013-02-25 19:49:26
Oracle有適當的異常處理。沒有必要爲了「發送」消息而產生錯誤 – 2013-02-25 23:15:13