ODAC 5 TOraQuery и функция возвращающая sys_refcursor

Wix
Дата: 15.06.2009 17:05:55
функция
  function Materials_By_Group(p_group_id number) return sys_refcursor is
    c_ref sys_refcursor;
  begin
    open c_ref for
      select * from material_dic where ;
    return c_ref;
  end;

как с использованием компонента TOraQuery вывести результат. Тут приводили пример, но там курсор выступал в качестве параметра процедуры.
Wix
Дата: 15.06.2009 17:10:29
Просьба простить в примере не до конца написал конструкция where, но сути дела это не меняет
Кроик Семён
Дата: 15.06.2009 17:19:30
может такое прокатит ...

CREATE OR REPLACE TYPE type_material_dic AS material_dic%ROWTYPE;

select * from TABLE ( cast( Materials_By_Group(...) as type_material_dic ) );

Wix
Дата: 15.06.2009 17:45:40
Да боюсь, что количество полей в запросе будет меняться. Такой простой запрос я привел в качестве примера, а так результатом запроса будет соединение нескольких таблиц и ROWTYPE не прокатит.
Кроик Семён
Дата: 15.06.2009 18:51:13
вот здесь наткнулся, попробуй такое:

select Materials_By_Group(...) from dual 
Кроик Семён
Дата: 15.06.2009 19:02:22
P.S.
странно, ссылка работает только тогда, когда по ней с google прыгаешь.
Прилагаю в виде PDF
Petro123
Дата: 15.06.2009 19:06:24
почему для ХП не использовать ОРАХП ? ______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
Wix
Дата: 15.06.2009 19:44:25
select Materials_By_Group(...) from dual 
Такое я писал уже в TOraQuery в результате выполнения пишет Неизвестный тип поля. в DOA это бы прокатило.
автор
почему для ХП не использовать ОРАХП ?

Неохота лишний компонент использовать.
Wix
Дата: 16.06.2009 10:30:30
Забил я на функцию, возвращающую курсор, перешел на параметр возвращающий курсор

  procedure Materials_By_Group(p_group_id number, c_ref out sys_refcursor) is
  begin
    open c_ref for
      select * from material_dic;
  end;
но теперь другая напасть Cursor can't open хотя явно указываю параметр в TOraQuery
    SQL.Text := 'begin stock.materials_by_group(1, :c) end;';
    Cursor := Params[0].AsCursor;
    Open;
Хотя до этого писали на форуме? для того чтобы этого не возникало надо вместо ExecSQL использовать Open.
Petro123
Дата: 16.06.2009 10:56:20
Wix
Забил я на функцию, возвращающую курсор, перешел на параметр возвращающий курсор

  procedure Materials_By_Group(p_group_id number, c_ref out sys_refcursor) is
  begin
    open c_ref for
      select * from material_dic;
  end;
но теперь другая напасть Cursor can't open хотя явно указываю параметр в TOraQuery
    SQL.Text := 'begin stock.materials_by_group(1, :c) end;';
    Cursor := Params[0].AsCursor;
    Open;
Хотя до этого писали на форуме? для того чтобы этого не возникало надо вместо ExecSQL использовать Open.

из за того что
автор
Неохота лишний компонент использовать.

(который для этого предназначен)
- ты пихаешь в инструкцию SELECT - функцию с курсором, что стандартом оракле запрещено
- ты пихаешь на клиента уродливые конструкции
'begin stock.materials_by_group(1, :c) end;'
что трудно в освоении и техподдержке
- ты пихаешь на клиента код в динамике, вместо использования IDE и "волшебников" :)