H.AL Ответов: 1

ORA-01002: выборка из последовательности


Я создал процедуру в базе данных oracle, которая возвращает данные в ref-курсоре, и я хочу, чтобы она возвращала rowcount этого курсора также в качестве выходной переменной. После тестирования переменная P_count заполняется правильно, но когда я попытался открыть ее, она была заполнена правильно.
ORA-01002: fetch out of sequence
ошибка срабатывает. Я уже читал об этом раньше и обнаружил, что проблема заключается в том, что я использую оператор fetch. Но до сих пор я не знал, как ее разрешить. Любая помощь приветствуется, спасибо.
Ниже приведена моя процедура:

PROCEDURE IS_CLIENT_LOGGED_IN (P_CLIENT_NUM Varchar2,P_CURSOR out SYS_REFCURSOR ,P_COUNT OUT NUMBER,P_ERROR out Varchar2) AS
 
 cur_rec Varchar2(1024);
   
 BEGIN
 
   BEGIN 
     Open P_CURSOR FOR
     SELECT  ID
     FROM    tbl_registration
     WHERE   tbl_client_id = P_CLIENT_NUM  
     AND     tbl_logout_date is null;
   
   LOOP
    FETCH P_CURSOR INTO cur_rec;  
    EXIT WHEN P_CURSOR%notfound;
    P_COUNT := P_CURSOR%rowcount;--will return row number beginning with 1
   END LOOP;
     
  
   EXCEPTION WHEN OTHERS THEN 
       P_ERROR := 'Unable to select Data from tbl_registration' ||SQLERRM;
   END; 
      
 END IS_CLIENT_LOGGED_IN;


Что я уже пробовал:

Я снял секционную петлю ... Курсор конца цикла открылся нормально, есть какие-нибудь подсказки?

1 Ответов

Рейтинг:
0

Wendelius

Если я правильно понимаю проблему, то похоже, что вы зацикливаете результирующий набор в процедуре, поэтому, когда вы пытаетесь продолжить выборку данных на вызывающей стороне, вы уже достигли конца результирующего набора.

Если вам нужно зациклить данные внутри процедуры и вернуть их вызывающему объекту, используйте другой курсор для обеих задач.