PL/SQL 异常和错误处理
Posted
技术标签:
【中文标题】PL/SQL 异常和错误处理【英文标题】:PL/SQL Exceptions and Errors Handling 【发布时间】:2011-01-28 09:56:24 【问题描述】:我正在用 Asp .Net 和 C# 做一个项目。我还使用 ODP .NET 连接到我的 Oracle DB。
我正在使用存储过程将值插入数据库。一切都很好,它也引发了我所有的例外。
我有 3 个例外:
-
当我尝试插入的值已存在于数据库中时
当我尝试插入空值时
默认“其他”
当引发前两个异常时,我将错误插入到错误表中,一切顺利。
我真正想知道的是,发生异常时如何向用户显示消息?
类似于dbms_output.put_line("Error");
...但我希望它显示在我的网页中。这可能吗?
欢迎任何提示,在此先感谢。
【问题讨论】:
【参考方案1】:由于您的 .NET 程序是您的客户端,因此您应该让任何未处理的异常从您的 PL/SQL 程序传播并返回到客户端,您可以像处理任何其他异常一样在客户端处理它。
换句话说,您应该从您的 PL/SQL 代码中删除“当其他人”异常,而是使用 C# 异常块包装您的数据库调用(使用 ODP.NET)。在那里,您可以捕获异常并获取 Oracle 错误编号和文本,并根据需要将其显示给用户。
(使用这种方法,您还可以在 PL/SQL 代码中使用 RAISE_APPLICATION_ERROR 向 C# 客户端发出错误信号。)
【讨论】:
非常感谢。有了你的解决方案,我知道我该怎么做。【参考方案2】:你可以修复存储过程返回一个整数,0代表ok,1代表1类异常,2类2异常等等......这样UI可以通知用户保存方法没有进展顺利。
通常我不会在存储过程中处理异常,但我知道您想从 SQL 记录错误,因此上述方式应该允许您做您想做的事情。
【讨论】:
你好 Davide,有趣的方法。例如,当发生异常时,它将返回例如 1。如何将此值发送回我的应用程序?通过在存储过程中使用 OUT 变量?谢谢【参考方案3】:在我们的 sql server 存储过程中,我们有这样的东西:
如果@@ERROR 0
return (1)
否则
return (0)
但这取决于存储的功能以及它返回的其他内容,如果存储返回一个表,则可以使用输出参数发回上面讨论的整数。
【讨论】:
以上是关于PL/SQL 异常和错误处理的主要内容,如果未能解决你的问题,请参考以下文章