Конференция "Базы" » Oracle [D7]
 
  • Кщд (17.12.08 11:37) [20]
    >Petr V. Abramov ©   (16.12.08 19:50) [19]
    в 9i точно не нужно явно приводить к типу результата?
  • ANB (17.12.08 12:16) [21]
    create or replace type HCF_RESULT_ERROR_T as object
    (
    CODE         number(5,0),
    DESCRIPTOIN  varchar2(255),
    PARAM1       varchar2(255),  
    PARAM2       varchar2(255),  
    PARAM3       varchar2(255),  
    CONSTRUCTOR function HCF_RESULT_ERROR_T return SELF as RESULT
    )

    create or replace function build_banknetting_list  
    return HCF_RESULT_ERROR_T
    is
     v_HCF_RESULT_ERROR_T HCF_RESULT_ERROR_T;
    begin
     v_HCF_RESULT_ERROR_T := HCF_RESULT_ERROR_T;
     v_HCF_RESULT_ERROR_T.CODE := 1;
     v_HCF_RESULT_ERROR_T.DESCRIPTOIN := 'F1';
     v_HCF_RESULT_ERROR_T.PARAM1 := 'F2';
     v_HCF_RESULT_ERROR_T.PARAM2 := 'F3';
     v_HCF_RESULT_ERROR_T.PARAM3 := 'F4';
     return v_HCF_RESULT_ERROR_T;
    end;

    select * from table(build_banknetting_list()) - не ботает.
  • Кщд (17.12.08 14:08) [22]
    >select * from table(build_banknetting_list()) - не ботает.

    create type HCF_RESULT_ERROR_NT as table of HCF_RESULT_ERROR_T;




    create or replace function build_banknetting_list  
    return HCF_RESULT_ERROR_NT
    is
    ...




    select * from table(build_banknetting_list());

  • nnnicky (17.12.08 15:10) [23]
    SELECT *
    FROM TABLE (SVB_NETTING.build_banknetting_list  
    (
     10,
     '08.12.2008',
     'KEP'
    ))   RETURN RESULT_ERROR_NT
  • ANB (17.12.08 15:37) [24]

    > SELECT *
    > FROM TABLE (SVB_NETTING.build_banknetting_list  
    > (
    >  10,
    >  '08.12.2008',
    >  'KEP'
    > ))   RETURN RESULT_ERROR_NT

     RETURN RESULT_ERROR_NT - зачем это ?
  • ANB (17.12.08 15:39) [25]

    > nnnicky   (17.12.08 15:10) [23]

    Прежде, чем пихать запрос в клиента - сначала добейся, чтобы он работал из девелопера.
  • ANB (17.12.08 15:42) [26]

    > Кщд   (17.12.08 14:08) [22]

    А середку функции ?
  • nnnicky (17.12.08 16:02) [27]
    товарищи, в девелопере он работает и возвращает данные. Мне нужно функцию из Delphi вызывать.

    FUNCTION build_banknetting_list  
    (
     iNETTINGNUMBER IN NUMBER,
     dDATENETTING IN DATE,
     sUSERCREATE IN VARCHAR2
     
    ) RETURN RESULT_ERROR_NT
    IS
    retval RESULT_ERROR_NT := RESULT_ERROR_NT();
    ErrorRec RESULT_ERROR_T := NEW RESULT_ERROR_T;
    BEGIN

    FOR nrec IN (
                    SELECT BL.ID,
                           BL.CUSTID,
                           BL.BANKNAME,
                           BL.ID_SVB_GROUPTYPELIST,
                           GTLD.DAYSTART,
                           GTLD.DAYEND                  
                      FROM SVB_BANKLIST BL
                      INNER JOIN SVB_GROUPTYPELIST GTL
                         ON BL.ID_SVB_GROUPTYPELIST = GTL.ID
                      INNER JOIN SVB_GROUPTYPELISTDAYS GTLD
                         ON GTL.ID = GTLD.ID_SVB_GROUPTYPELIST
                     WHERE GTLD.DAYNUMBER = to_char(dDATENETTING,'D')  
                )
     LOOP  
       ErrorRec := SVB_BLIZKO_NETTING_LIB.ADD_BANK_TO_BANKNETTING (
                                       iNETTINGNUMBER ,
                                       nrec.ID ,
                                       dDATENETTING ,
                                       nrec.DAYSTART,
                                       nrec.DAYEND,  
                                       sUSERCREATE ,
                                       nrec.CUSTID,
                                       nrec.BANKNAME
                                                                   );
       IF ErrorRec.CODE IS NOT NULL
       THEN BEGIN                              
              retval.extend;
              retval(retval.last) := ErrorRec;
            END;
       END IF;                                      
                                   

     END LOOP;
     RETURN retval;
    END build_banknetting_list;

  • ANB (17.12.08 17:53) [28]

    > товарищи, в девелопере он работает и возвращает данные.

    С ретурном работает ? И вертает набор данных ?
  • Petr V. Abramov © (17.12.08 23:26) [29]

    > nnnicky   (17.12.08 16:02) [27]

    поубивал би

    > ANB   (17.12.08 17:53) [28]

    а че в девелопере не работать, test на ф-ции, девелопер и сгенерит скрипт.
  • Кщд (18.12.08 07:46) [30]
    >nnnicky   (17.12.08 15:10) [23]
    Вам ещё в Petr V. Abramov ©   (16.12.08 19:50) [19] всё сказали
  • Кщд (18.12.08 08:05) [31]
    >Petr V. Abramov ©   (17.12.08 23:26) [29]
    >поубивал би
    вполне нормальная ситуация для специализированного фреймворка
    работает не самым быстрым образом - зато надежно
  • Petr V. Abramov © (18.12.08 13:45) [32]

    > Кщд   (18.12.08 08:05) [31]

    вполне нормальная ситуация для незнания синтаксиса, это все одним селектом делается
  • Petr V. Abramov © (18.12.08 16:55) [33]
    а может, я и погорячился, переключений контекста меньше.
    но
    > IF ErrorRec.CODE IS NOT NULL
    >    THEN BEGIN                            
    >           retval.extend;
    >           retval(retval.last) := ErrorRec;
    >         END;
    >    END IF;

    улыбает :)
  • nnnicky (18.12.08 17:29) [34]

    > улыбает :)


    чем же вас так улыбнуло?
  • Petr V. Abramov © (18.12.08 17:51) [35]

    > nnnicky   (18.12.08 17:29) [34]

    не нужен там begin ... end, чай не паскаль.
    и for nrec ... loop крутить ни к чему, select ... bulk collect into быстрее, если записей немного, если много, то fetch ... bulk collect into limit N
  • Кщд (19.12.08 10:50) [36]
    >Petr V. Abramov ©   (18.12.08 17:51) [35]
    >не нужен там begin ... end, чай не паскаль.
    но на производительность-таки этот анонимный блок не влияет)

    >select ... bulk collect into быстрее
    мне совсем не верится, что автор привел реальный код ф-ции и в цикле нет exit when.
    иначе, не совсем понятно, а зачем, собственно, нужна такая ф-ция?

    если придираться по-серьезному, то больше улыбает оптимизм решений на create type, поддержку которого oracle задекларировал, видимо, в чисто маркетинговых целях, т.к. до сих пор нет корректной поддержки работы с ним
    и отдельный большой привет тем системам, что начали использовать наследование таких объектов в oracle
  • Petr V. Abramov © (19.12.08 11:19) [37]

    > Кщд   (19.12.08 10:50) [36]


    > если придираться по-серьезному, то больше улыбает оптимизм
    > решений на create type,

    в 10-ке все очень культурно-мультурно работает, фактическ ине реализованы только foreign ключи на поля подтипов. В 8-ке, да, была жесть с объектными типами, 9-ку я пропустил.
  • Кщд (19.12.08 14:10) [38]
    >в 10-ке все очень культурно-мультурно работает
    даже в 10-ке при изменении базового типа необходимо дропать ВСЁ дерево наследований и прокатывать заново
    не дай боже поставить final-тип в качестве поля таблицы...
    а без этого сам смысл использования теряется - проще пользоваться pipelined + pl/sql collections
    т.е. как не было вменяемой поддержки типов, так и нет
    и, судя по metalink, и не предвидится
  • Petr V. Abramov © (19.12.08 14:45) [39]

    > Кщд   (19.12.08 14:10) [38]

    >при изменении базового типа необходимо дропать ВСЁ дерево наследований > и прокатывать заново
    не надо, alter type нормально работает, по крайней мере, на добавление атрибутов

    > не дай боже поставить final-тип в качестве поля таблицы...
    а что будет?
 
Конференция "Базы" » Oracle [D7]
Есть новые Нет новых   [134477   +39][b:0][p:0.003]