Главная страница
    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 в продуктиве уменьшает до нуля


 
Petr V. Abramov ©   (2008-12-22 16:45) [41]


> Кщд   (22.12.08 10:08) [40]

так и drop column только аж в 8-й версии появилось.
я использую, от кучи другого гимра избавляет


 
nnnicky   (2008-12-24 12:11) [42]

SELECT *
FROM TABLE (SVB_BLIZKO_NETTING.build_banknetting_list  
( :NETTINGNUMBER,
 :DATENETTING,
  user
))



dsHB.Params[0].AsNumber := 10;
dsHB.Params[1].AsDate := 08-12-2008;


Не работают параметры... Тип Number и Date. Когда явно указываю значения - все ок. А так говорит нет таких данных


 
Кщд   (2008-12-24 12:35) [43]

>nnnicky   (24.12.08 12:11) [42]
приводите оригинальный текст ошибки

>dsHB.Params[1].AsDate := "08-12-2008";
передавайте дату, а не строку


 
sniknik ©   (2008-12-24 12:47) [44]

> передавайте дату, а не строку
у него не строка вообще то, насколько вижу, а число, результат странных вычислений...


 
nnnicky   (2008-12-24 15:13) [45]

ORA - 22905: Cannot access rows from a non-nested table item


 
nnnicky   (2008-12-24 15:18) [46]

ORA-22905 cannot access rows from a non-nested table item

Cause: An attempt was made to access rows of an item whose type is not known at parse time or that is not of a nested table type.

Action: Use CAST to cast the item to a nested table type.


Так и в таблице такой тип....


 
Petr V. Abramov ©   (2008-12-24 16:11) [47]

это связано с параметрами или нет???


 
nnnicky   (2008-12-24 16:19) [48]

ошибка возникает при использовании параметров... Ну по всякому уже и всеравно никак :(


 
Кщд   (2008-12-25 08:03) [49]

>nnnicky   (24.12.08 12:11) [42]


SELECT *
FROM TABLE (cast(SVB_BLIZKO_NETTING.build_banknetting_list  
( :NETTINGNUMBER,
:DATENETTING,
 user
) as YourFunctionsType))


 
nnnicky   (2008-12-25 16:16) [50]

procedure  TfmHBListBank.Set_DataSet(bActive : Boolean);
var  iID : integer;
iData : STRING;
i   : integer;
iSelectedCount : integer;
begin
iSelectedCount := fmHBBankNetting.gBaseDBtv.Controller.SelectedRecordCount;
if iSelectedCount < 1 then exit;
 if iSelectedCount > 0 then
 begin
for i := 0 to iSelectedCount -1 do
iID := fmHBBankNetting.gBaseDBtv.Controller.SelectedRecords[i].Values[fmHBBankNetting.g BaseDBtv.GetColumnByFieldName("ID").Index];
DSHB.ParamByName("NETTINGNUMBER").AsInteger := iID ;
end;


Параметры из другой таблицы... Нужно выбором строки из Grida их читать. Т.е. выбираем строку с параметрами, жмем кнопку и вызываем процедуру.  Параметры не видит...


 
Petr V. Abramov ©   (2008-12-25 17:35) [51]


> nnnicky   (25.12.08 16:16) [50]

оттестируй запрос с параметрами в pl/sql developer, потм будем с "выбором строки из Grida их читать" разбираться


 
nnnicky   (2008-12-26 11:01) [52]


> оттестируй запрос с параметрами в pl/sql developer, потм
> будем с "выбором строки из Grida их читать" разбираться


работает


 
nnnicky   (2008-12-30 09:02) [53]

тема открыта... работает в developer всего лишь... )



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

Форум: "Базы";
Текущий архив: 2009.12.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.59 MB
Время: 0.006 c
8-1190053070
Дельфин
2007-09-17 22:17
2009.12.06
Несколько потоков звука в программе


15-1255109110
31512
2009-10-09 21:25
2009.12.06
Вопрос о использовании Random в многопоточном приложении


1-1227792603
Дмитрий Белькевич
2008-11-27 16:30
2009.12.06
Приложение блокирует папку после копирования файлов в неё


1-1227270584
parasolka
2008-11-21 15:29
2009.12.06
Ширина ячеек в DBGrid.


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский