通过存储过程执行通过DBLINK的查询语句失败-单个语句成功--ORA-00604
2014-04-24 16:11
1051 查看
客户遇到个问题,描述如下:--环境是ORACLE 9.2.0.8
(语句及场景非真实了,网上找的,情况是一致的)创建了一个DB_LINK连接另一个Oracle数据库。 select * from tablename@dblinkname;
单句执行没问题,但是把这句SQL写到存储过程内:
create or replace procedure prc_test
is
begin
insert into test
select * from tablename@dblinkname;
commit;
end;
就发生如下错误,存储过程编译不通过:
Compilation errors for PROCEDURE prc_test
Error: PL/SQL: ORA-04052: 在查找远程对象 tablename@dblinkname 时出错
ORA-00604: 递归 SQL 层 1 出现错误
ORA-03106: 致命的双工通信协议错误
ORA-02063: 紧接着line(源于XXX(被连接的数据库服务名))
Line: 4
Text: insert into test
Error: PL/SQL: SQL Statement ignored
Line: 4
Text: insert into test
#########################################################
以下metalink上解决问题方法,打上对应的补丁即可
--这里我未打补丁,只是找出原因向客户说明而已。Subject: Errors ORA-00604 And ORA-03106 During Procedure Compilation
Doc ID: 577347.1 Type: PROBLEM
Modified Date : 26-MAY-2008 Status: MODERATED
Applies to:
PL/SQL - Version: 9.2.0.4 to 9.2.0.8
This problem can occur on any platform.
This note applies only if the underlying Oracle Client is below 9.2.0.8 Patch 4
Symptoms
While trying to run pl/sql code involving queries which access remote objects, you may endup getting below errors:
PL/SQL: ORA-04052: error occurred when looking up remote object <object name>
ORA-00604: error occurred at recursive SQL level 1
ORA-03106: fatal two-task communication proto error
ORA-02063: preceding line from AFQ
When the same query is run outside pl/sql block it runs perfectly.
Cause
You are most probably hitting the Bug 5866805.
Bug 5866805 duplicate of Bug 5576340 which is itself a duplicate of Bug 5671074.
Solution
The Bug 5671074 IS fixed IN 9.2 .0 .8 Patch 4 OR above.
相关文章推荐
- Oracle采用存储过程执行sql语句,将查询到的数据导出到EXCEL中
- SQL查询语句执行速度快,存储过程执行慢
- 存储过程执行DDL语句提示ORA-01031错误:权限不足
- Oracle.DataAccess.Client.OracleException ORA-00600: 内部错误代码,通过C#执行上面存储过程报错,而通过PLSQL执行不报错。谁知道原因。
- 如何通过dblink truncate远程数据库上的表+调用远程存储过程,提示ORA 02064 .
- 执行oracle中的job报错:ORA-12011:无法执行作业1存储过程执行DDL语句提示ORA-01031错误:权限不足
- sql在所有存储过程中查询包含某字符串的执行语句
- 生成SQL语句字符串,通过存储过程执行
- 解决ORA-02021: 不允许对远程数据库进行 DDL 操作下面通过DBLINK调用远程过程来执行这样的操作。
- SQL Server 第四堂课,创建存储过程。存储过程是一组编译在单个执行计划中的transact-SQL语句。存储过程相当于C#函数,可以允许模块化程序设计,允许更快执行如果某操作需要大量transct-SQL代码或需要重复执行,将在创建存储过程中对其进行分析和优化。
- 存储过程中sql语句按变量进行判断执行相应的查询条件
- mysql 存储过程:提供查询语句并返回查询执行影响的行数
- DBA工具——DMV——通过sys.dm_exec_procedure_stats查看存储过程执行信息
- Sql语句与存储过程查询数据的性能测试实现代码
- 详解MySQL查询语句执行过程1
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
- 通用的可带查询条件的SQL语句的分页存储过程(2)
- MySQL存储过程where条件执行失败的问题
- 存储过程输出查询语句过程的固定形式
- Mysql存储过程——通过百度坐标,查询半径内符合条件的用户以及排序后的距离