oracle sql查询的游标中的ROWNUM不工作

oracle sql查询的游标中的ROWNUM不工作,oracle,plsql,oracle10g,Oracle,Plsql,Oracle10g,请看下面的oracle函数 DROP FUNCTION get_mapper_requests; CREATE OR REPLACE FUNCTION get_mapper_requests(p_status IN NUMBER, p_rownum IN NUMBER) RETURN SYS_REFCURSOR AS CUR_MED_MAPPER_STATUS SYS_REFCURSOR; BEGIN dbms_output.put_line('Status Value:'||p_st

请看下面的oracle函数

DROP FUNCTION get_mapper_requests;

CREATE OR REPLACE FUNCTION get_mapper_requests(p_status IN NUMBER, p_rownum IN NUMBER)
RETURN  SYS_REFCURSOR
AS

CUR_MED_MAPPER_STATUS SYS_REFCURSOR;

BEGIN

dbms_output.put_line('Status Value:'||p_status);

dbms_output.put_line('Row Count:'||p_rownum);

OPEN CUR_MED_MAPPER_STATUS FOR SELECT cmd_id,status FROM CDFDBA.MED_COM_MAPPER_CMDS WHERE 
STATUS=p_status and ROWNUM < p_rownum;

RETURN CUR_MED_MAPPER_STATUS;

END;
请支持。

在您输入呼叫代码后,我认为您丢失了

EXIT WHEN c%NOTFOUND;

如果没有这一点,我会假设您的代码只是不断使用最后获取的行调用DBMS_输出,直到您得到填充DBMS输出缓冲区的错误。

。它现在起作用了。但在这里,我假设当我将值传递为10时,游标将只有10条记录。你能给我详细介绍一下这种情况吗?循环并没有神奇地绑定到光标上。所以你需要明确地打破我们的循环。您的光标正在获取9行
declare
   cursor c is select * from <table_name> where rownum < 15;  -- SELECT ONLY 15 ROWS OF TABLE
   type t is table of c%rowtype index by pls_integer;
   tab t;
begin
   open c;
   loop
      fetch c bulk collect into tab limit 10;   -- FETCH cursor in chunks of 10
      dbms_output.put_line('X'); 
      exit when c%notfound;
   end loop;
end;
declare
   cursor c is select * from <table_name> where rownum < 15;  -- SELECT ONLY 15 ROWS OF TABLE
   type t is table of c%rowtype index by pls_integer;
   tab t;
begin
   open c;
   loop
      fetch c bulk collect into tab limit 10;   -- FETCH cursor in chunks of 10
      dbms_output.put_line('X'); 
      exit when c%notfound;
   end loop;
end;