我对Oracle PL / SQL的了解有限,但我想知道PL / SQL 程序是否有可能通知来电者,例如,它试图UPDATE
的记录不存在。
调用者可以是应用程序代码,如Java / JDBC,但需要以某种方式通知此类事件。 PL / SQL过程(不是函数)不返回值。可以RAISE
过程中的异常让DB管理代码(即JDBC)知道发生了这样的事件吗?那里有更好的解决方案吗?
答案 0 :(得分:4)
通知意味着我的异步,但我不认为这就是你的意思 - 调用者正在处理响应,对吧?引发异常是通知调用者发生问题的方法。
例如, JDBC将获得SQLException。您引发的异常(可以是您自己的with raise_application_error()
)将有一个数字和一条消息,可以从SQLException获得,如in this question所示。
您可以检查SQL%ROWCOUNT
attribute以检查更新是否会影响任何行,如果该值为零则引发异常 - 表示没有更新行,因此您尝试更新的记录不会存在。
答案 1 :(得分:0)
你可以在你的程序上有一个out参数,你可以在那里返回更新行的数量(使用SQL%ROWCOUNT),这样调用者就会知道是否有0条记录被更新。