oracle 错误ORA-03111在通信信道上接收到中断

7dl7o3gd  于 2023-01-25  发布在  Oracle
关注(0)|答案(6)|浏览(1359)

在不同的服务器上从oracle 11 g更改为oracle 10 g R1后,在通信信道上收到错误ORA-03111 Break。
我使用的是DotNet框架4.5。
我用谷歌搜索了一下,但没有找到任何解决办法。

sczxawaw

sczxawaw1#

在我的情况下(在connection.Open()上获得异常),问题是Oracle服务器版本太旧,无法使用托管提供程序。
根据:https://community.oracle.com/thread/2528641
托管驱动程序支持连接到Oracle DB Server 10.2或更高版本。它不支持DB 10.1。

jdgnovmf

jdgnovmf2#

在我的例子中,原因是NVL函数的输入返回了多行-下面的blabla子查询:

PROCEDURE my_procedure(c_my_cursor OUT SYS_REFCURSOR) IS
  p_my_cursor SYS_REFCURSOR;
BEGIN
  OPEN p_my_cursor FOR
  select nvl((select blabla), 0) my_column from my_table;
  c_my_cursor := p_my_cursor;
END smiley_alle_jurenheder;

非常有趣的是,当直接在SQL Developer中运行查询时,会返回正确的错误代码-“ORA-01427:单行子查询返回多行””。

olhwl3o2

olhwl3o23#

由于这是谷歌搜索这个错误时的第一个结果,我想我也会添加我的解决方案。这个错误似乎是由于各种原因突然出现的,这使得它很难排除故障。
我在构建一个在MSSQL和Oracle上运行的应用程序时遇到了它。启动时它会创建一个简单的表。为了防止错误,任何现有的表都会被删除。这个多行、多命令的脚本在MSSQL上运行良好,但它的Oracle等价物总是返回这个错误。
当我一个接一个地运行命令(drop,create table,create sequence)时,我终于解决了这个问题。)将其留在DDL语句中也会导致ORA-03111错误。
回想起来,我知道在Oracle中一次运行多个命令是很麻烦的,但这个错误对那些没有使用Oracle《双城之战》方法的人来说毫无用处。

vcudknz3

vcudknz34#

我的问题是数据库中缺少一列。它是在另一个环境中创建的。很难找到真正的问题,因为这个错误什么也没有告诉我们。
在其他计算机上调试时,真正的问题出现了。
希望这能帮助到一些人。

qlfbtfca

qlfbtfca5#

我还有另一个原因,我正在查询PeopleSoft,如果我做一个整型过滤器,字符串应该是这样的。
这将导致ORA-03111失败:

SELECT Q.* FROM sysadm.PS_WMV_PRC_DISTRIB Q WHERE 1=1 AND PROJECT_ID = 123

虽然这很好:

SELECT Q.* FROM sysadm.PS_WMV_PRC_DISTRIB Q WHERE 1=1 AND PROJECT_ID = '123'

这一条信息有这么多的用途!我希望这能对某些人有所帮助。

j8yoct9x

j8yoct9x6#

对我来说,问题出在表列的名称上,我用双引号(“)创建了它,因为它是Oracle的保留字之一,但NHibernate不理解这一点,在发送命令时没有用双引号发送它,我将列名改为非保留字。

相关问题