通知调用方不存在记录的 DML PL/SQL 过程
Posted
技术标签:
【中文标题】通知调用方不存在记录的 DML PL/SQL 过程【英文标题】:DML PL/SQL Procedure That Notifies a Caller of Non-Existing Record 【发布时间】:2014-01-28 18:34:46 【问题描述】:我对 Oracle PL/SQL 的了解有限,但我想知道 PL/SQL procedure 是否有可能通知调用者,例如,它试图UPDATE
的记录不存在。
调用者可以是应用程序代码,如 Java/JDBC,但需要以某种方式通知此类事件。 PL/SQL 过程(不是函数)不返回值。程序中的RAISE
ing 异常可以让DB管理代码,即JDBC,知道发生了这样的事件吗?有没有更好的解决方案?
【问题讨论】:
【参考方案1】:通知对我来说意味着异步,但我认为这不是你的意思 - 调用者正在处理响应,对吗?引发异常是通知调用者出现问题的方式。
例如,JDBC 会得到一个 SQLException。您提出的异常(可以是您自己的,with raise_application_error()
)将有一个数字和一条消息,可从 SQLException 获得,如 in this question 所示。
您可以检查SQL%ROWCOUNT
attribute 以检查更新是否影响了任何行,如果该值为零则引发异常 - 表示没有更新任何行,因此您尝试更新的记录不存在.
【讨论】:
【参考方案2】:您可以在您的过程中有一个 out 参数,您可以在其中返回更新的行数(使用 SQL%ROWCOUNT),这样调用者就会知道是否更新了 0 条记录。
【讨论】:
以上是关于通知调用方不存在记录的 DML PL/SQL 过程的主要内容,如果未能解决你的问题,请参考以下文章
带有输入参数的 Oracle JDBC 调用 PL/SQL 过程记录表