Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Oracle [D7]


Страницы:   1 2 3

nnnicky ©   (2008-12-16 12:19:00) 

Добрый день!
Есть некая функция, которая вызывается через экшен.
Делаю так: в компонент OraQuery пишу запрос:

SELECT *
FROM TABLE (SVB_NETTING.build_netting_list  
(
 iNETTINGNUMBER IN NUMBER,
 dDATENETTING IN DATE,
 sUSERCREATE IN VARCHAR2

))RETURN RESULT_ERROR_NT

Соответственно вызываю:
procedure TfmHBBankNetting.act_BuildListExecute(Sender: TObject);
begin
 inherited;
OraQuery.Execute;
end;

Нужно сделать: в случае если RESULT_ERROR_NT содержит записи показать в отдельном окне пользователю.
Вопрос простенький наверно, но что-то пока не пойму как сделать.



Petr V. Abramov   (2008-12-18 16:55:00) [21]

а может, я и погорячился, переключений контекста меньше.
но
> IF ErrorRec.CODE IS NOT NULL
>    THEN BEGIN                           
>           retval.extend;
>           retval(retval.last) := ErrorRec;
>         END;
>    END IF;

улыбает :)


Petr V. Abramov   (2008-12-18 13:45:00) [22]


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

вполне нормальная ситуация для незнания синтаксиса, это все одним селектом делается


Кщд   (2008-12-18 08:05:00) [23]

>Petr V. Abramov ©   (17.12.08 23:26) [29]
>поубивал би
вполне нормальная ситуация для специализированного фреймворка
работает не самым быстрым образом - зато надежно


Кщд   (2008-12-18 07:46:00) [24]

>nnnicky   (17.12.08 15:10) [23]
Вам ещё в Petr V. Abramov ©   (16.12.08 19:50) [19] всё сказали


Petr V. Abramov   (2008-12-17 23:26:00) [25]


> nnnicky   (17.12.08 16:02) [27]

поубивал би

> ANB   (17.12.08 17:53) [28]

а че в девелопере не работать, test на ф-ции, девелопер и сгенерит скрипт.


ANB   (2008-12-17 17:53:00) [26]


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

С ретурном работает ? И вертает набор данных ?


nnnicky   (2008-12-17 16:02:00) [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   (2008-12-17 15:42:00) [28]


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

А середку функции ?


ANB   (2008-12-17 15:39:00) [29]


> nnnicky   (17.12.08 15:10) [23]

Прежде, чем пихать запрос в клиента - сначала добейся, чтобы он работал из девелопера.


ANB   (2008-12-17 15:37:00) [30]


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

 RETURN RESULT_ERROR_NT - зачем это ?


nnnicky   (2008-12-17 15:10:00) [31]

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


Кщд   (2008-12-17 14:08:00) [32]

>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());


ANB   (2008-12-17 12:16:00) [33]

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()) - не ботает.


Кщд   (2008-12-17 11:37:00) [34]

>Petr V. Abramov ©   (16.12.08 19:50) [19]
в 9i точно не нужно явно приводить к типу результата?


Petr V. Abramov   (2008-12-16 19:50:00) [35]

SELECT *
FROM TABLE (SVB_NETTING.build_netting_list  
(
:i ,
:d ,
:s
))

должно на ура сработать


ANB   (2008-12-16 17:17:00) [36]


> Нет. вот функция.))  А выше всего лишь способ ее  вызова

Смущает меня такой способ вызова. И вряд ли он и из пакета работать будет.
Функция даже не пипелайновая, т.е. вертает просто рекорд.
Из клиента такую вызвать весьма непросто.
По любому как минимум безымянный блок нужен.


Медвежонок Пятачок   (2008-12-16 15:27:00) [37]

опять по памяти нет под рукой сервера.

нужно тритить объект к типу и затем уже обращаться к атрибутам


nnnicky   (2008-12-16 14:54:00) [38]

2. TYPE  RESULT_ERROR_T AS OBJECT(
 CODE         NUMBER(5,0),
 DESCRIPTOIN  VARCHAR2(255),
 PARAM1       VARCHAR2(255),  
 PARAM2       VARCHAR2(255),  
 PARAM3       VARCHAR2(255),  
 CONSTRUCTOR FUNCTION RESULT_ERROR_T RETURN SELF AS RESULT
);

3. ODAC


Кщд   (2008-12-16 13:54:00) [39]

>nnnicky   (16.12.08 13:44) [14]
>1. Oracle 9i
уже легче

>2. возвращает таблицу (RETURN RESULT_ERROR_NT -  тип)
дефиницию типа привести не в состоянии?

>3. компоненты OraQuery oraDataSource
вероятно, это ODAC?


nnnicky   (2008-12-16 13:44:00) [40]

1. Oracle 9i
2. возвращает таблицу (RETURN RESULT_ERROR_NT -  тип)
3. компоненты OraQuery oraDataSource


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо