在Java/JDBC中透明处理“ORA-04068”错误

豆豆网   技术应用频道   2008年05月08日    社区交流

内容摘要:在Oracle 里,如果你想编写存储过程你当然应该使用PL/SQL包。在这篇文章里,假设你一般了解PL/SQL 和非常熟悉PL/SQL 包。这篇文章关注于一个令人讨厌的错误,这个错误使许多使用PL/SQL以及使用API(例如JDBC)从应用层调用它的开发人员很苦恼。

  session2>createorreplacepackagebodypkgas
  2procedurep
  3is
  4begin
  5insertintot(x)values(1);
  6endp;
  7endpkg;
  8/
  Packagebodycreated.
  session2>showerrors;
  Noerrors.

  现在如果你回到会话1并重新执行包存储过程p,它会成功执行。

  session1>execpkg.p
  PL/SQLproceduresuccessfullycompleted.

  让我们看看到目前为止我们所做的。我们定义了一个简单的包,只具有一个插入一个常量到一个数据表中的存储过程。我们开启了一个会话并执行这个包存储过程。在另一个会话中我们重新编译这个包(通过重新创建它)。当我们在第一个会话中重新执行这个包时,它运行正常——特别是,在会话2中包的重新编译在会话1中存储过程的第二次执行没有出现任何错误。

  现在让我们重复这整个过程,只改变一个地方——添加一个全局变量到包体中(添加到规范中是一样的)。这意味着我们给包添加了“状态”。我们在下一节“体验2”中将讲述只做了这一个改变的相同体验。

  体验2

  我们从之前的会话退出。开启一个新的会话并在会话1中编辑我们新的包体,如下所示——注意在包的开始部分有一个常量声明,如下面的粗体显示。这是包的状态。这个常量不会被使用,但是它是这个体验没有得到结果的原因。

  session1>@pkg_body
  session1>createorreplacepackagebodypkgas
  2g_constantconstantnumber:=1;
  3procedurep
  4is
  5begin
  6insertintot(x)values(1);
  7endp;
  8endpkg;
  9/
  Packagebodycreated.
  session1>showerrors;
  Noerrors.

来源:IT专家网    作者:戴羽    责编:豆豆技术应用

正在加载评论...