如何在过程中创建用户定义的异常?

Posted

技术标签:

【中文标题】如何在过程中创建用户定义的异常?【英文标题】:How to create user defined exception in a procedure? 【发布时间】:2021-05-05 06:36:06 【问题描述】:

使用过程将员工记录添加到员工表中,同时验证输入值薪水必须始终大于或等于 500,针对任何验证错误引发用户定义的异常。

【问题讨论】:

这不是标题 您遇到问题了吗?什么问题?你试过什么?您需要编辑您的问题以证明您遇到的具体问题,然后我们可以开始帮助您。不过,我们不会为你做作业! 【参考方案1】:

你可以创建这样的东西。也为其他列添加参数

CREATE OR REPLACE PROCEDURE insert_emp (salary NUMBER)
AS

  invalid_salary EXCEPTION;

BEGIN

  IF salary < 500 THEN 
    RAISE invalid_salary;
  ELSE 
    
    INSERT INTO employees(salary) VALUES (salary);
    COMMIT;
  END IF;

END;

您还可以将异常编号与异常相关联

用户定义异常的异常编号必须在 -20000 到 -20999 的范围内

CREATE OR REPLACE PROCEDURE insert_emp (salary NUMBER)
AS

  invalid_salary EXCEPTION;
  PRAGMA EXCEPTION_INIT (invalid_salary, -20100);

BEGIN

  IF salary < 500 THEN
    RAISE invalid_salary;
  ELSE

    INSERT INTO employees(salary) VALUES (salary);
    COMMIT;
  END IF;

END;

【讨论】:

【参考方案2】:

这听起来像是一个家庭作业问题,所以我将放弃使用触发器,除了可能需要并且显示更好的处理方法。您提出用户定义的异常“无效工资”,但是除非您的代码处理它,否则 Oracle 将抛出错误“ORA-06510 未处理的用户定义的异常”,表明它不知道它是什么。那么有什么更好的方法:定义列并在其上包含检查约束。

Create table employees (...
                       , salary number(8,2) not null 
                         constraint salary_less_then_minimum check (salary >= 500)
                       , ...);

【讨论】:

问题中提到应该是一个程序。

以上是关于如何在过程中创建用户定义的异常?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用自定义用户代理的 SwiftUI 中创建 Safari 视图?

如何在 DB2 Z/OS 8.1 版本中创建用户定义函数?

如何在 VSCode 中创建自定义对话框?

iOS:如何保存在应用程序中创建的自定义对象

如何在 HSQLDB 中创建复杂的用户定义类型?

我如何知道是不是创建了用户定义组件?