Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.06;
Скачать: CL | DM;

Вниз

Oracle   Найти похожие ветки 

 
nnnicky   (2008-12-16 12:19) [0]

Добрый день!
Есть некая функция, которая вызывается через экшен.
Делаю так: в компонент 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 содержит записи показать в отдельном окне пользователю.
Вопрос простенький наверно, но что-то пока не пойму как сделать.




 
Кщд   (2008-12-16 12:44) [1]


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

))RETURN RESULT_ERROR_NT

это, простите, чушь
учите синтаксис


 
Медвежонок Пятачок ©   (2008-12-16 12:48) [2]

отчего же сразу чушь. эта оракул


 
Кщд   (2008-12-16 12:52) [3]

>Медвежонок Пятачок ©   (16.12.08 12:48) [2]
>отчего же сразу чушь. эта оракул
настаиваете?)


 
ANB   (2008-12-16 12:52) [4]


> отчего же сразу чушь. эта оракул

Потому и чушь, что оракл.

Автор :
1. У тебя в девелопере этот запрос выполняется ?
2. Если уж хочешь вернуть набор данных, то надо делать Open.


 
Медвежонок Пятачок ©   (2008-12-16 13:05) [5]

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


 
nnnicky   (2008-12-16 13:09) [6]

Это функция из пакета Oracle и она прекрасно работает.


 
Кщд   (2008-12-16 13:17) [7]

>nnnicky   (16.12.08 13:09) [6]
1. не указана версия oracle
2. не указан тип значения, возвращаемого ф-цией
3. приведенный Вами синтаксис sql-запроса не существует в природе

>Медвежонок Пятачок ©   (16.12.08 13:05) [5]
>автор просто применяет псевдофункцию тэйбл к коллекции.
sql-level type, pipelined function?
и это только если поверить в Ваше допущение, что эта ф-ция(если это, действительно, ф-ция:)) возвращает не, например, xmltype)


 
nnnicky   (2008-12-16 13:17) [8]

так как же мне выцепить RETURN RESULT_ERROR_NT?


 
nnnicky   (2008-12-16 13:20) [9]


> 3. приведенный Вами синтаксис sql-запроса не существует
> в природе


Но как-то странным образом прекрасно работает


 
Кщд   (2008-12-16 13:20) [10]

>nnnicky   (16.12.08 13:17) [8]
озвучьте, пожалуйста:
Кщд   (16.12.08 13:17) [7]
+ тип RETURN RESULT_ERROR_NT
+ компоненты доступа


 
Кщд   (2008-12-16 13:21) [11]

>nnnicky   (16.12.08 13:20) [9]
>Но как-то странным образом прекрасно работает
в sqlplus работает?)


 
nnnicky   (2008-12-16 13:24) [12]


> (если это, действительно, ф-ция:))


FUNCTION build_banknetting_list  
(
 iNETTINGNUMBER IN NUMBER,
 dDATENETTING IN DATE,
 sUSERCREATE IN VARCHAR2
 
) RETURN RESULT_ERROR_NT
Нет. вот функция.))  А выше всего лишь способ ее  вызова


 
Кщд   (2008-12-16 13:28) [13]

>nnnicky   (16.12.08 13:24) [12]
>Нет. вот функция.))  А выше всего лишь способ ее  вызова
ну, дело Ваше)
успехов


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

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


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

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

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

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


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

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 15:27) [17]

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

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


 
ANB   (2008-12-16 17:17) [18]


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

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


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

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

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


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

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


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


 
Кщд   (2008-12-17 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   (2008-12-17 15:10) [23]

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


 
ANB   (2008-12-17 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   (2008-12-17 15:39) [25]


> nnnicky   (17.12.08 15:10) [23]

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


 
ANB   (2008-12-17 15:42) [26]


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

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


 
nnnicky   (2008-12-17 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   (2008-12-17 17:53) [28]


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

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


 
Petr V. Abramov ©   (2008-12-17 23:26) [29]


> nnnicky   (17.12.08 16:02) [27]

поубивал би

> ANB   (17.12.08 17:53) [28]

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


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

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


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

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


 
Petr V. Abramov ©   (2008-12-18 13:45) [32]


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

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


 
Petr V. Abramov ©   (2008-12-18 16:55) [33]

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

улыбает :)


 
nnnicky   (2008-12-18 17:29) [34]


> улыбает :)


чем же вас так улыбнуло?


 
Petr V. Abramov ©   (2008-12-18 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


 
Кщд   (2008-12-19 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 ©   (2008-12-19 11:19) [37]


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


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

в 10-ке все очень культурно-мультурно работает, фактическ ине реализованы только foreign ключи на поля подтипов. В 8-ке, да, была жесть с объектными типами, 9-ку я пропустил.


 
Кщд   (2008-12-19 14:10) [38]

>в 10-ке все очень культурно-мультурно работает
даже в 10-ке при изменении базового типа необходимо дропать ВСЁ дерево наследований и прокатывать заново
не дай боже поставить final-тип в качестве поля таблицы...
а без этого сам смысл использования теряется - проще пользоваться pipelined + pl/sql collections
т.е. как не было вменяемой поддержки типов, так и нет
и, судя по metalink, и не предвидится


 
Petr V. Abramov ©   (2008-12-19 14:45) [39]


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

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

> не дай боже поставить final-тип в качестве поля таблицы...
а что будет?


 
Кщд   (2008-12-22 10:08) [40]

>Petr V. Abramov ©   (19.12.08 14:45) [39]
>не надо, alter type нормально работает, по крайней мере, на добавление атрибутов
с добавлением всё в порядке - cascade или invalidate - и вперед
проблемы начинаются с drop attribute и целой череды ограничений, связанных с ним

плюс к этому до сих нерешенная проблема с одноименными типами в разных схемах одного инстанса
всё это, конечно, обходится, но желание задействовать ООП механизм Oracle в продуктиве уменьшает до нуля



Страницы: 1 2 вся ветка

Текущий архив: 2009.12.06;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.013 c
1-1211016204
max1991
2008-05-17 13:23
2009.12.06
Имя заголовка колонки у Cross в FastReport


15-1250841620
Empleado
2009-08-21 12:00
2009.12.06
На чем мультики делать?


2-1256063307
Novii
2009-10-20 22:28
2009.12.06
Bitmap and Bitmap


15-1254506831
fics)
2009-10-02 22:07
2009.12.06
Windows&Сom порт


2-1256034430
Фуфик
2009-10-20 14:27
2009.12.06
Сменить путь в ADOConnection