1

我在使用函数参数动态生成的 ORACLE 函数中有一个游标。

我定义了光标的文本,在某些情况下我包括以下语句:

      sql_stmt := sql_stmt || 'AND MOD ( LOG_ID, :logsetmax ) = :logset ';

我使用 ORACLE OPEN-FOR-USING 语句打开游标并传递参数(例如,将 :logsetmax 设置为 3 和 :logset 设置为 0)。

当我的程序包含上面的约束时,我的程序挂起并且我得到 ORA-03113 和 ORA-03114 错误。

ORACLE 是否阻止我将 :logsetmax 的游标参数(使用 USING 传入)绑定到我的游标声明的 MOD 函数中并导致这种不可预测的行为?

我怀疑我的错误是由于非绑定参数除以零导致 ORACLE 连接超时?

任何建议将不胜感激。

更新

作为一个实用的解决方案,我修改了我的 SQL 以从游标绑定中删除这些约束,并将它们硬编码到 SQL 中,如下所示:

            sql_stmt := sql_stmt || 'AND MOD ( LOG_ID, ' || p_logsetmax || ' ) = ' || p_logset || ' ';
4

1 回答 1

2

ORA-03113:通信通道错误的文件结尾是一般错误。连接时的 ORA-03113 错误表明连接已建立,但后来丢失,如超时。

ORA-03113 错误有很多可能的原因。

ORA-3113 可以针对以下任何一种情况发出信号:

  • 机器崩溃
  • 服务器进程在操作系统级别被杀死
  • 网络问题
  • 服务器上的 Oracle 内部错误/中止
  • 客户端错误地处理多个连接
  • 等等。很多可能的原因

行动:存在需要进一步调查的通信错误。首先,检查网络问题并查看 SQL*Net 设置。此外,查看 alert.log 文件是否有任何错误。最后测试一下服务器进程是否死机,失败时是否生成了trace文件。

来源: ora-code.com

于 2010-02-01T09:50:53.890 回答