当前位置: 首页 > 面试题库 >

通过dblink调用存储的proc

萧渝
2023-03-14
问题内容

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

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所属的相同数据库实例和模式运行此程序时,我可以很好地运行它。但是,当我通过数据库链接运行它((对存储的过程名称进行必要的修改等)时,我得到一个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是引用游标类型。ref游标是仅在创建它的数据库中有效的内存句柄。换句话说,您不能在远程数据库中创建ref游标并尝试从中获取本地数据库。

如果您确实需要处理本地数据库中的数据,并且表必须保留在远程数据库中,则可以将包“
package_name”移动到本地数据库中,并通过以下方式对远程数据库中的表执行查询:数据库链接。



 类似资料:
  • 我使用JDBC这样调用这个过程: 它向我抛出一个错误,通知调用格式错误。 但是如果我像这样直接在IDE中运行调用:

  • 从1.r.58开始, 支持出参, 之前的版本仅支持入参. 从实现方式上说, 是通过扩展自定义SQL的含义及上下文来实现 仅含义入参的存储过程 // 建表,删除老的存储过程. dao.create(Pet.class, true); dao.insert(Pet.create("wendal")); dao.execute(Sqls.create("DROP PRO

  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。

  • 主要内容:创建CallableStatement对象,关闭CallableStatement对象,JDBC SQL转义语法在讨论JDBC Statement教程文章时,我们已经学习了如何在JDBC中使用存储过程。 本教程文章与该部分类似,但它将讲解演示有关JDBC SQL转义语法的其他信息。 就像对象创建和对象一样,它可使用同样的方式创建对象,该对象将用于执行对数据库存储过程的调用。 创建CallableStatement对象 假设需要执行以下Oracle存储过程 - 注意:上面的存储过程是为O

  • 目前,我正在作业步骤中使用JdbcCursorItemReader和FlatFileItemWriter。 由于性能问题,我们不得不使用存储过程。 在Spring Batch 2.0中有没有一种方法可以调用存储过程。释放? ...其他配置 如何使用可调用语句编写自定义数据库读取器...感谢示例代码..谢谢,。