我在 mysql 数据库中有几百个触发器,我正在将其迁移到 Oracle 数据库。有这样一种说法,我看到了很多,但在 oracle 中找不到等效的说法。
INSERT INTO $some_kind_of_message._BD_TRIGG$ (dummy) VALUES (value);
我也在过程和函数中看到了这一点,它似乎向调用该过程的应用程序“返回”一条消息(我认为)。我在 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;
最佳答案
我认为您需要RAISE_APPLICATION_ERROR()
函数/过程。
语法:
raise_application_error(error code, your error message);
示例:
raise_application_error(-20001, 'Login must have 4 characters or more');
在 Oracle 中,自定义应用程序错误代码介于 -20000
和 -20999
之间。
更多信息请参见:
Oracle PL/SQL - Raise User-Defined Exception With Custom SQLERRM
Oracle 文档:link
关于mysql - Oracle 相当于 MySQL 代码 "insert into dummy"返回错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15075102/