use*_*430 16 oracle error-handling
我想使用功能上类似于其他语言中的 ASSERT 例程,即构造(无论是过程,语法......)
ASSERT( <condition>, <msg>)
Run Code Online (Sandbox Code Playgroud)
这样,当<condition>传入的第一个参数为 false 时,会引发带有指定<msg>描述性消息的异常。
我知道手工做这件事很简单,但我想知道DBMS 是否提供了标准的。
必须自己编写一个或从 3rdy-party 包中导入一个是不切实际的,因为我需要它对我正在处理的每个项目都是完全可移植和透明的。
Phi*_*lᵀᴹ 11
SQL 或 PL/SQL 中没有内置断言过程,因此您必须编写自己的断言过程。
有两种方法可以解决这个问题。您可以手动引发异常,如这篇 Oracle 文章 中所述,或者您可以为该raise_application_error过程编写一个包装器,这在文档的Oracle 异常处理部分进行了介绍。
我要补充一点,异常是为这种场景设计的,所以你最好暂时脱掉你的程序员帽子并使用你的 DBA 帽子:)
内置的DBMS_ASSERT包是您正在寻找的范围狭窄的版本。对于 Phil 是正确的其他断言,您将必须构建自己的断言。这是 Phil 的回答+1 中第二个选项的简单演示:
set serveroutput on size 1000000
Declare
Procedure Assert (pCondition In Number, pMessage In Varchar2) Is
Begin
If (pCondition = 1) Then
Return;
End If;
Raise_Application_Error(-20001, pMessage);
End Assert;
Begin
DBMS_Output.Put_Line('Start');
Assert(Case When 1+1=2 Then 1 Else 0 End,'Something is wrong 1.');
Assert(Case When 1+1=9 Then 1 Else 0 End,'Something is wrong 2.');
DBMS_Output.Put_Line('End');
End;
/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6323 次 |
| 最近记录: |