PL / SQL异常和错误处理

时间:2011-01-28 09:56:24

标签: c# oracle stored-procedures plsql

我在Asp .Net和C#做一个项目。我也在使用ODP .NET连接到我的Oracle DB。

我正在使用存储过程将值插入数据库。一切都很好,它也提出了我所有的例外。

我有3个例外:

  1. 当我尝试插入的值已经存在于数据库中时
  2. 当我尝试插入空值
  3. 默认“其他”
  4. 当引发前两个异常时,我将错误插入表错误中,一切顺利。

    我真正想知道的是,如何在发生异常时向用户显示消息?

    dbms_output.put_line("Error");之类的东西......但我想让它显示在我的网页上。这可能吗?

    欢迎任何提示,提前谢谢。

3 个答案:

答案 0 :(得分:4)

由于您的.NET程序是您的客户端,您应该让任何未处理的异常从PL / SQL程序传播回客户端,在那里您可以像处理任何其他异常一样处理它。

换句话说,您应该从PL / SQL代码中删除“when others”异常,而是将数据库调用(使用ODP.NET)与C#异常块包装起来。在那里,您可以捕获异常并获取Oracle错误号和文本,并在需要时将其显示给用户。

(使用此方法,您还可以在PL / SQL代码中使用RAISE_APPLICATION_ERROR将错误信号发送回C#客户端。)

答案 1 :(得分:1)

您可以修复存储过程以返回整数,0表示正常,1表示类型1的异常,类型2的2例外等等...这样UI可以通知用户保存方法没有顺利进行。

通常我不会在存储过程中处理异常,但我知道你想从SQL中记录错误,所以上面的方法可以让你做你想做的事。

答案 2 :(得分:0)

在我们的sql server存储过程中,我们有类似的东西:

IF @@ ERROR<> 0

return (1)

ELSE

return (0)

但它取决于存储的内容以及它返回的内容,如果存储返回一个表,则可以使用output参数发回上面讨论的整数。