通知调用者非现有记录的DML PL / SQL过程

时间:2014-01-28 18:34:47

标签: oracle stored-procedures jdbc plsql

我对Oracle PL / SQL的了解有限,但我想知道PL / SQL 程序是否有可能通知来电者,例如,它试图UPDATE的记录不存在。

调用者可以是应用程序代码,如Java / JDBC,但需要以某种方式通知此类事件。 PL / SQL过程(不是函数)不返回值。可以RAISE过程中的异常让DB管理代码(即JDBC)知道发生了这样的事件吗?那里有更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

通知意味着我的异步,但我不认为这就是你的意思 - 调用者正在处理响应,对吧?引发异常是通知调用者发生问题的方法。

例如,

JDBC将获得SQLException。您引发的异常(可以是您自己的with raise_application_error())将有一个数字和一条消息,可以从SQLException获得,如in this question所示。

您可以检查SQL%ROWCOUNT attribute以检查更新是否会影响任何行,如果该值为零则引发异常 - 表示没有更新行,因此您尝试更新的记录不会存在。

答案 1 :(得分:0)

你可以在你的程序上有一个out参数,你可以在那里返回更新行的数量(使用SQL%ROWCOUNT),这样调用者就会知道是否有0条记录被更新。