Oracle等效于MySQL代码“insert into dummy”以返回错误消息

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语句?非常感谢 编辑: 这是许多事件的一个例

我在mysql数据库中有几百个触发器,我正在迁移到Oracle数据库。有一句话我看到了很多我在甲骨文中找不到的东西

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我添加了一些信息。我不是甲骨文专家,但这一行应该没有任何声明。