Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2009.12.06;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.006 c
2-1255442299
Б
2009-10-13 17:58
2009.12.06
Чем писать лог?


1-1228119004
parasolka
2008-12-01 11:10
2009.12.06
Передача параметров в Dll.


15-1255017902
TUser
2009-10-08 20:05
2009.12.06
Сакральный смысл понятия дурак :)


15-1254947408
Юрий
2009-10-08 00:30
2009.12.06
С днем рождения ! 8 октября 2009 четверг


2-1255702102
Aleks
2009-10-16 18:08
2009.12.06
Как узнать индекс доб.итема в ListView?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский