PL/SQL 异常和错误处理

发布于 2024-10-14 21:18:22 字数 368 浏览 1 评论 0原文

我正在用 Asp .Net 和 C# 做一个项目。我还使用 ODP .NET 连接到我的 Oracle 数据库。

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

我有 3 个异常:

  1. 当我尝试插入的值已存在于数据库中
  2. 时 当我尝试插入空值时
  3. 默认“其他”

当引发前两个异常时,我将错误插入到表错误中,一切顺利。

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

类似 dbms_output.put_line("Error");...但我希望它显示在我的网页中。这可能吗?

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

I'm doing a project in Asp .Net and C#. I'm also using ODP .NET to connect to my Oracle DB.

I am using a stored procedure to insert a value into the database. Everything is fine, it also raises all the exceptions I have.

I have 3 exceptions:

  1. when the value I try to insert already exists in the database
  2. when i try to insert a null value
  3. Default "Others"

When the first two exceptions are raised I insert the error into a table Errors, everything goes well.

What I really want to know is, how can I show a message to the user when a Exception occurs?

Something like dbms_output.put_line("Error");...but I want it to show in my webpage. Is this possible?

Any tips are welcome, thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

扬花落满肩 2024-10-21 21:18:22

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

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

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

Since your .NET program is your client, you should let any unhandled exceptions propagate from your PL/SQL program and back to the client, where you can deal with it like any other exception.

In other words, you should remove the "when others" exception from your PL/SQL code, and instead wrap your database call (using ODP.NET) with a C# exception block. There you can catch the exception and get the Oracle error number and text, and display it to the user if you want.

(Using this approach you can also use RAISE_APPLICATION_ERROR in your PL/SQL code to signal errors back to the C# client.)

送舟行 2024-10-21 21:18:22

您可以修复存储过程以返回整数,0 表示正常,1 表示类型 1 的异常,2 类型 2 的异常等等...这样 UI 可以通知用户保存方法不顺利,如下所示预期的。

通常我不会处理存储过程中的异常,但我知道您想要记录 SQL 中的错误,因此上述方法应该允许您执行您想要的操作。

You can fix the stored procedure to return an integer, 0 means ok, 1 means exception of type 1, 2 exception of type 2 and so on... in this way the UI can notify the user that saving method did not go well as expected.

Normally I would not have handled the exception in the stored procedure but I understand that you want to log the error from SQL so the above way should allow you to do what you want.

芸娘子的小脾气 2024-10-21 21:18:22

在我们的 sql server 存储过程中,我们有这样的内容:

IF @@ERROR <> 0

return (1)

ELSE

return (0)

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

In our sql server stored procedures we have something like this:

IF @@ERROR <> 0

return (1)

ELSE

return (0)

but it depends on what the stored does and what else it returns, if the stored returns a table, you can then use output parameter to send back the integer discussed above.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文