是否可以在另一个过程中打开包中的游标?

Posted

技术标签:

【中文标题】是否可以在另一个过程中打开包中的游标?【英文标题】:Is it possible to open cursor which is in package in another procedure? 【发布时间】:2015-02-19 07:47:27 【问题描述】:

只是想一想,是否可以在另一个程序中打开包中的光标?

示例:pack_name 有一个过程 myprocedure。在这个程序中打开的光标可以在另一个程序中打开吗? 即可以为 LV_QUERY 打开 LV_TEST_CUR;写在另一个过程中?

create or replace package pack_name
is 
create or replace 
PROCEDURE myprocedure
AS
  LV_TEST_CUR SYS_REFCURSOR;
  LV_QUERY VARCHAR2(200);
  LV_DATE  DATE;
BEGIN
  LV_QUERY:='select sysdate as mydate from dual';



END myprocedure;
end pack_name;

【问题讨论】:

【参考方案1】:

你为什么想要?在一个包的过程中定义用于引用游标的查询然后在完全不同的包的过程中打开它是没有意义的。

当然有可能(尽管您的尝试行不通)-您只是传递包含要用于打开引用光标的选择语句的字符串-但这不是最好的设计。首先,您现在被困在使用动态 sql 中,否则您可能已经能够使用静态 sql 打开引用游标(动态 sql 仅在运行时检查,而不是在编译时检查,因此您不会知道任何语法错误,直到您尝试打开游标)。

一般来说,我会坚持在定义的相同位置打开引用光标。

【讨论】:

以上是关于是否可以在另一个过程中打开包中的游标?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 ref 游标是不是从 pl/sql 过程返回数据

如何调用ORACLE程序包中的存储过程

Sql中的游标是干嘛的

过程中的查询是不是需要游标?

如何从包中删除过程或函数

创建存储过程后红移游标不存在