-
>Petr V. Abramov © (16.12.08 19:50) [19] в 9i точно не нужно явно приводить к типу результата?
-
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()) - не ботает.
-
>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());
-
SELECT * FROM TABLE (SVB_NETTING.build_banknetting_list ( 10, '08.12.2008', 'KEP' )) RETURN RESULT_ERROR_NT
-
> SELECT * > FROM TABLE (SVB_NETTING.build_banknetting_list > ( > 10, > '08.12.2008', > 'KEP' > )) RETURN RESULT_ERROR_NT
RETURN RESULT_ERROR_NT - зачем это ?
-
> nnnicky (17.12.08 15:10) [23]
Прежде, чем пихать запрос в клиента - сначала добейся, чтобы он работал из девелопера.
-
> Кщд (17.12.08 14:08) [22]
А середку функции ?
-
товарищи, в девелопере он работает и возвращает данные. Мне нужно функцию из 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;
-
> товарищи, в девелопере он работает и возвращает данные.
С ретурном работает ? И вертает набор данных ?
-
> nnnicky (17.12.08 16:02) [27]
поубивал би
> ANB (17.12.08 17:53) [28]
а че в девелопере не работать, test на ф-ции, девелопер и сгенерит скрипт.
-
>nnnicky (17.12.08 15:10) [23] Вам ещё в Petr V. Abramov © (16.12.08 19:50) [19] всё сказали
-
>Petr V. Abramov © (17.12.08 23:26) [29] >поубивал би вполне нормальная ситуация для специализированного фреймворка работает не самым быстрым образом - зато надежно
-
> Кщд (18.12.08 08:05) [31]
вполне нормальная ситуация для незнания синтаксиса, это все одним селектом делается
-
а может, я и погорячился, переключений контекста меньше. но > IF ErrorRec.CODE IS NOT NULL > THEN BEGIN > retval.extend; > retval(retval.last) := ErrorRec; > END; > END IF;
улыбает :)
-
> улыбает :)
чем же вас так улыбнуло?
-
> nnnicky (18.12.08 17:29) [34]
не нужен там begin ... end, чай не паскаль. и for nrec ... loop крутить ни к чему, select ... bulk collect into быстрее, если записей немного, если много, то fetch ... bulk collect into limit N
-
>Petr V. Abramov © (18.12.08 17:51) [35] >не нужен там begin ... end, чай не паскаль. но на производительность-таки этот анонимный блок не влияет)
>select ... bulk collect into быстрее мне совсем не верится, что автор привел реальный код ф-ции и в цикле нет exit when. иначе, не совсем понятно, а зачем, собственно, нужна такая ф-ция?
если придираться по-серьезному, то больше улыбает оптимизм решений на create type, поддержку которого oracle задекларировал, видимо, в чисто маркетинговых целях, т.к. до сих пор нет корректной поддержки работы с ним и отдельный большой привет тем системам, что начали использовать наследование таких объектов в oracle
-
> Кщд (19.12.08 10:50) [36]
> если придираться по-серьезному, то больше улыбает оптимизм > решений на create type,
в 10-ке все очень культурно-мультурно работает, фактическ ине реализованы только foreign ключи на поля подтипов. В 8-ке, да, была жесть с объектными типами, 9-ку я пропустил.
-
>в 10-ке все очень культурно-мультурно работает даже в 10-ке при изменении базового типа необходимо дропать ВСЁ дерево наследований и прокатывать заново не дай боже поставить final-тип в качестве поля таблицы... а без этого сам смысл использования теряется - проще пользоваться pipelined + pl/sql collections т.е. как не было вменяемой поддержки типов, так и нет и, судя по metalink, и не предвидится
-
> Кщд (19.12.08 14:10) [38]
>при изменении базового типа необходимо дропать ВСЁ дерево наследований > и прокатывать заново не надо, alter type нормально работает, по крайней мере, на добавление атрибутов
> не дай боже поставить final-тип в качестве поля таблицы... а что будет?
|