![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Oracle [D7]
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