关于存储过程返回游标的错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于存储过程返回游标的错误相关的知识,希望对你有一定的参考价值。

我现有有2个存储过程
第一个是:
CREATE OR REPLACE PROCEDURE FILTER_USERS_NOTIME
(
fun_cmd in varchar2, /*ÃüÁî¹Ø¼ü×Ö*/
fun_cmdId in varchar2, /*ÃüÁîÁ÷Ë®ºÅ*/
fun_hostId in varchar2, /*Ö÷ »ú ºÅ*/
fun_user in varchar2, /*Óà »§*/
fun_degree in varchar2 /*×Üµç ¶ÈÊý*/
)
AS
fun_tableName varchar2(20);
fun_condition varchar2(20);
fun_CURSOR FILTER_DATA.FD_CURSOR;
begin
if FILTER_USERS(fun_user)=false then
select tableName,condition into fun_tableName,fun_condition from userfilter where command=fun_cmd and hostid=fun_hostId and commandId=fun_cmdId;
FILTER_DATA_PROCEDURE(fun_tableName,fun_condition,fun_CURSOR);
if fun_CURSOR%FOUND then
DBMS_OUTPUT.PUT_LINE('ÓαêÒÔ´ò¿ª');
else
DBMS_OUTPUT.PUT_LINE('Óαêδ´ò¿ª');
end if;
end if;
end;
这个存储过程将调用另外一个存储过程返回游标
create or replace procedure FILTER_DATA_PROCEDURE(
fdp_tableName in varchar2,
fdp_condition in varchar2,
fdp_CURSOR out FILTER_DATA.FD_CURSOR
)
as
fdp_sql varchar2(100);
begin
fdp_sql:='select * from ' || fdp_tableName || fdp_condition;

open fdp_CURSOR for fdp_sql;

end;

还有个包头定义的游标

CREATE OR REPLACE PACKAGE FILTER_DATA
AS
TYPE FD_CURSOR IS REF CURSOR;
END

然后执行的时候抱个什么SQL命令未正确结束·
希望高手赐教啊·

参考技术A 光有包头,没有包体,包里面有个游标,但是游戏只是声明了一个类型,也有在包体里面实现这个游标,在FILTER_DATA_PROCEDURE这个过程里面打开了游标,也没有关闭.建议你去学习了包的写法,游标的使用方法在来好好看看你自己写的

关于存储过程返回游标的处理

我现在有2个存储过程
第一个是要获得第二个返回的游标
但是获得之后应该怎么处理呢?
CREATE OR REPLACE PROCEDURE FILTER_USERS_NOTIME
(
fun_cmd in varchar2, /*ÃüÁî¹Ø¼ü×Ö*/
fun_cmdId in varchar2, /*ÃüÁîÁ÷Ë®ºÅ*/
fun_hostId in varchar2, /*Ö÷ »ú ºÅ*/
fun_user in varchar2, /*Óà »§*/
fun_degree in varchar2 /*×Üµç ¶ÈÊý*/
)
AS
fun_tableName varchar2(20);
fun_condition varchar2(20);
fun_CURSOR sys_refcursor;
begin
if FILTER_USERS(fun_user)=false then
select tableName,condition into fun_tableName,fun_condition from userfilter where command=fun_cmd and hostid=fun_hostId and commandId=fun_cmdId;
FILTER_DATA(fun_tableName,fun_condition,fun_CURSOR);
end if;
end;

然后调用第二个存储过程返回了一个游标
create or replace procedure FILTER_DATA(
fdp_tableName in varchar2,
fdp_condition in varchar2,
fdp_CURSOR out sys_refcursor
)
as
fdp_sql varchar2(100);
begin
fdp_sql:='select * from ' || fdp_tableName || ' ' || fdp_condition;
open fdp_CURSOR for fdp_sql;
end;

第一个存储过程得到fun_CURSOR这个游标后该怎么处理啊·
我想得到里面的结果集

参考技术A 对游标进行遍历,获得游标中的数据,存放到结果集中,
呵呵,希望能有帮助,^_^

以上是关于关于存储过程返回游标的错误的主要内容,如果未能解决你的问题,请参考以下文章

MySql数据库的存储过程能返回游标么?

如何调用返回引用游标的Oracle存储过程

关于sqlserver存储过程的问题

如何使用c#执行返回多个游标的oracle存储过程

oracle存储过程返回游标,取值报错

关于mysql 的存储过程