Пройтись по курсору дважды

Максим Н
Дата: 04.12.2012 17:00:50
SET SERVEROUTPUT ON
DECLARE

  context_v  dbms_xmlgen.ctxhandle;
  xml_o xmltype;
  TYPE curs_t IS REF CURSOR;
  curs curs_t;
  curs1 curs_t;
  curs2 curs_t;
  t number;

  function open_my_cursor
    return curs_t
  is
    v_c curs_t;
  begin
    open v_c for select 2 as t from dual;
    return v_c;
  end;  
  
BEGIN
  curs1 := open_my_cursor;

  context_v := DBMS_XMLGEN.newcontext(curs1);
  xml_o := DBMS_XMLGEN.getxmltype(
      context_v,
      DBMS_XMLGEN.none);

  DBMS_OUTPUT.put_line(xmltype.getclobval(xml_o));
  
  curs2 := open_my_cursor;
  
  loop
    fetch curs2 into t;
    exit when curs%NOTFOUND;
  end loop;

END;
/



Справедливо получаю:

Error report:
ORA-01001: invalid cursor
ORA-06512: at line 36
01001. 00000 -  "invalid cursor"


Как можно решить ?
orawish
Дата: 04.12.2012 17:03:19
Максим Н,

чтобы дважды удочку из речки вытянуть - надо её дважды забросить
Максим Н
Дата: 04.12.2012 17:09:11
orawish,

Понял спасибо
кстати
Дата: 04.12.2012 18:09:47
Максим Н,

Только вот если в курсоре будет последовательность или данные поменяются, то рыба будет другой.
Dimitry Sibiryakov
Дата: 04.12.2012 19:49:34

кстати
если в курсоре будет последовательность или данные поменяются, то рыба будет
другой.

И именно поэтому существует такая вещь как Repeatable Read.

Posted via ActualForum NNTP Server 1.5

Серафимный Шестикрыл
Дата: 04.12.2012 20:16:02
Dimitry Sibiryakov
кстати
если в курсоре будет последовательность

И именно поэтому существует такая вещь как Repeatable Read.


Шутить изволим ?
Dimitry Sibiryakov
Дата: 04.12.2012 20:39:00

Серафимный Шестикрыл
Шутить изволим ?

Шутить кто-то изволит, но не я. У того, кто ляпал спецификацию этого RR чувство юмора
потолще будет.

Posted via ActualForum NNTP Server 1.5

Серафимный Шестикрыл
Дата: 04.12.2012 20:47:53
Dimitry Sibiryakov
Шутить кто-то изволит, но не я. У того, кто ляпал спецификацию этого RR чувство юмора
потолще будет.


Не надо тут про философию Ганди. Пример дай нам грешным, когда у тебя
select <тут имя sequence>.nextval from <тут табличка> будет repeatable read.
Dimitry Sibiryakov
Дата: 04.12.2012 20:57:27

Серафимный Шестикрыл
Пример дай нам грешным, когда у тебя select <тут имя
sequence>.nextval from <тут табличка> будет repeatable read.

В PL/SQL - никогда. Там нет scrollable cursors.

Posted via ActualForum NNTP Server 1.5

Серафимный Шестикрыл
Дата: 04.12.2012 21:09:33
Dimitry Sibiryakov
В PL/SQL - никогда. Там нет scrollable cursors.


Продолжаем жечь ?

Scrollable cursors тут ни разу ни при чем. равно как и PL/SQL никаким боком тут не стоял.
Ты тут толковал про releatable read, что относится к механизму поддержания согласованности.

Дабы не продолжать ненужной дискуссии - ты знаешь как работает механизм генерации sequence и какие собственно уровни изоляции есть в Oracle ?