sql – 通过dblink调用存储过程
发布时间:2020-05-24 17:26:48 所属栏目:MsSql 来源:互联网
导读:我试图通过数据库链接调用存储过程.代码看起来像这样: declare symbol_cursor package_name.record_cursor; symbol_record package_name.record_name;begin symbol_cursor := package_name.function_name(argument
|
我试图通过数据库链接调用存储过程.代码看起来像这样: declare
symbol_cursor package_name.record_cursor;
symbol_record package_name.record_name;
begin
symbol_cursor := package_name.function_name('argument');
loop
fetch symbol_cursor into symbol_record;
exit when symbol_cursor%notfound;
-- Do something with each record here,e.g.:
dbms_output.put_line( symbol_record.field_a );
end loop;
CLOSE symbol_cursor;
当我从package_name所属的相同数据库实例和架构运行它时,我能够正常运行它.但是,当我在数据库链接上运行它时(对存储的proc名称进行必要的修改等)我得到一个oracle错误:ORA-24338:语句句柄未执行. dblink上此代码的修改版本如下所示: declare
symbol_cursor package_name.record_cursor@db_link_name;
symbol_record package_name.record_name@db_link_name;
begin
symbol_cursor := package_name.function_name@db_link_name('argument');
loop
fetch symbol_cursor into symbol_record;
exit when symbol_cursor%notfound;
-- Do something with each record here,e.g.:
dbms_output.put_line( symbol_record.field_a );
end loop;
CLOSE symbol_cursor;
解决方法从你的另一个问题我记得package_name.record_cursor是一个引用游标类型.引用游标是仅在创建它的数据库中有效的内存句柄.换句话说,您不能在远程数据库中创建引用游标并尝试从中获取本地数据库.如果您确实需要处理本地数据库中的数据并且表必须保留在远程数据库中,那么您可以将程序包“package_name”移动到本地数据库中,并让它通过远程数据库中的表执行查询.数据库链接. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 确定SQL Server中是否存在临时表的最佳方法是
- sql-server – DBA新工作的第一天 – 检查备份和安全性 –
- linq-to-sql – LinqToSql和全文搜索 – 可以做到吗?
- sql – 整数字段中的NULL与0
- sql-server – 在SQL Server中创建可以保存存储过程结果的临
- sql-server – 如何在非区分大小写的字段上执行精确的字符串
- sql-server – 如何从umbraco CMS导出数据?
- 使用MSSQL查询获取父级的所有子级
- sql-server – SQL Server:数据页面大小混乱:8060 96字节
- SQL Server 三种分页方式性能比较
