ROWNUM в CURSOR oracle sql запрос не работает - PullRequest
0 голосов
/ 14 ноября 2011

Пожалуйста, посмотрите на приведенную ниже функцию оракула:

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;

Вышеприведенная функция возвращает все записи, даже если я передам любое целочисленное значение переменной p_rownumНапример, если p_rownum = 10, функция возвращает все записи,

Вызывающий блок

DECLARE

 c SYS_REFCURSOR;

 v  VARCHAR2(1000);

 v1 VARCHAR2(1000);

BEGIN

 dbms_output.put_line('Hello');

 c := get_mapper_requests(0, 10);

 LOOP

    FETCH c INTO v,v1; 

    dbms_output.put_line('Value from cursor: '||v||' '||v1);

 END LOOP;

 CLOSE c;

END;
/

Пожалуйста, поддержите.

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

После того, как вы FETCH в коде вызова, я думаю, что вы пропускаете

EXIT WHEN c%NOTFOUND;

Без этого я бы предположил, что ваш код просто продолжает вызывать DBMS_OUTPUT с последней выбранной строкой, пока не получитеошибка при заполнении буфера вывода dbms.

0 голосов
/ 16 ноября 2011
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...