加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 通过dblink调用存储过程

发布时间:2020-12-12 06:22:31 所属栏目:MsSql教程 来源:网络整理
导读:我试图通过数据库链接调用存储过程.代码看起来像这样: 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_
我试图通过数据库链接调用存储过程.代码看起来像这样:
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”移动到本地数据库中,并让它通过远程数据库中的表执行查询.数据库链接.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读