mysql - Oracle 相当于 MySQL 代码 "insert into dummy"返回错误消息

标签 mysql sql oracle oracle11g

我在 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/

相关文章:

php - iOS 无法通过 PHP 在 iPhone 应用程序和 MySQL 数据库之间进行通信

php - 具有嵌套/层次关系表的 SQL 查询

sql - 基于离散 GPS 消息的连续行程

Oracle 连接和 VS2012

mysql - 将两行结果合并为一行 MYSQL

mysql - 使用 DATE 和 TIME 函数对多个表进行排序

mysql - 聚合函数的返回值

sql - 如果 col b 的值匹配,则用 col a 的值填充 col a 的 NULL

database - 数据库是否接受循环引用?

sql - 从间隔数据类型中提取总秒数