Mar. 31st, 2009

mirall: (job)
    Баг за номером 7174888.
declare
  sValue varchar2(50);
  cOut sys_refcursor;
  procedure p1 (o_cur out sys_refcursor)
  begin
    open o_cur for
      select 'value' value from dual;
  end p1;
begin
  p1( o_cur => cOut );
  fetch cOut r into sValue;
  close cOut
end;
    Падает на этапе fetch с ошибкой ORA-06504: PL/SQL: Return types of Result Set variables or query do not match

    Workaround.
    Открыть предварительно курсор.
declare
  sValue varchar2(50);
  cOut sys_refcursor;
  procedure p1 (o_cur out sys_refcursor)
  begin
    open o_cur for
      select 'value' value from dual;
  end p1;
begin
  open cOut for 'select 1 from dual';
  p1( o_cur => cOut );
  fetch cOut r into sValue;
  close cOut
end;
mirall: (job)
    Удаление дубликатов. Один из весьма распространённых вопросов на собеседованиях :)

delete from our_table
  where rowid not in (
    select min(rowid) 
      from our_table 
      group by column1, column2, column3... 
    )

    Постраничный вывод данных (по Кайту).
select * 
  from ( select /*+ FIRST_ROWS(n) */ a.*, rownum rn
    from ( 
      your_query_goes_here, 
        with order by
    ) a 
    where ROWNUM <= :MAX_ROW_TO_FETCH ) 
  where rnum  >= :MIN_ROW_TO_FETCH
Page generated Jul. 20th, 2025 09:25 pm
Powered by Dreamwidth Studios