Oracle等效于MySQL代码“insert into dummy”以返回错误消息
我在mysql数据库中有几百个触发器,我正在迁移到Oracle数据库。有一句话我看到了很多我在甲骨文中找不到的东西Oracle等效于MySQL代码“insert into dummy”以返回错误消息,mysql,sql,oracle,oracle11g,Mysql,Sql,Oracle,Oracle11g,我在mysql数据库中有几百个触发器,我正在迁移到Oracle数据库。有一句话我看到了很多我在甲骨文中找不到的东西 INSERT INTO $some_kind_of_message._BD_TRIGG$ (dummy) VALUES (value); 我在过程和函数中也看到了这一点,它似乎向调用该过程的应用程序“返回”了一条消息。我对这两种关系型数据库都是新手,但我已经和oracle合作了几个月 是否有一个等价的语句来取代oracle中的mysql语句?非常感谢 编辑: 这是许多事件的一个例
INSERT INTO $some_kind_of_message._BD_TRIGG$ (dummy) VALUES (value);
我在过程和函数中也看到了这一点,它似乎向调用该过程的应用程序“返回”了一条消息。我对这两种关系型数据库都是新手,但我已经和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;
我不熟悉MySQL语法,但在Oracle中它被翻译为
Insert into table_name(column_name) VALUES (value);
其中,dummy是传递给函数的某个表或参数中的一列。不能在Oracle的Insert语句中使用过程、触发器。您可以在DML语句中使用函数,例如选择\u functiondummy…,插入\u functiondummy。。。函数返回一个我们都知道的值。我认为您需要使用RAISE\u APPLICATION\u ERROR函数/过程
语法:
raise_application_error(error code, your error message);
例如:
raise_application_error(-20001, 'Login must have 4 characters or more');
在Oracle中,自定义应用程序错误代码介于-20000和-20999之间
更多信息请点击此处:
Oracle文档:我不相信Oracle触发器可以返回值。如果它抛出将返回的异常。如果您想创建事务表或类似性质的表,可以从触发器内部插入另一个表。Oracle有适当的异常处理。发送消息时不必生成错误,我将看一看示例。@AlejandroBastidas我添加了一些信息。我不是甲骨文专家,但这一行应该没有任何声明。