首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过dblink调用存储的进程

通过dblink调用存储的进程
EN

Stack Overflow用户
提问于 2009-07-13 21:26:44
回答 1查看 6.4K关注 0票数 4

我正在尝试通过数据库链接调用存储过程。代码看起来像这样:

代码语言:javascript
复制
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所属的同一个DB实例和模式运行它时,我能够很好地运行它。但是,当我在数据库链接上运行它时(需要修改存储的proc名称等),我得到一个oracle错误: ORA-24338:语句句柄未执行。

这段代码在dblink上的修改版本如下:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-13 22:38:44

在你的另一个问题中,我记得package_name.record_cursor是一个引用游标类型。引用游标是仅在创建它的数据库中有效的内存句柄。换句话说,您不能在远程数据库中创建引用游标,然后尝试从它获取本地数据库。

如果您确实需要处理本地数据库中的数据,而表必须留在远程数据库中,那么您可以将包"package_name“移到本地数据库中,让它通过数据库链接对远程数据库中的表执行查询。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1122175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档