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

Вниз

Освобождение ресурса в finally   Найти похожие ветки 

 
ANB   (2008-05-04 15:13) [440]

Мой ответ :

with X as
(
select
"<?xml version="1.0" encoding="windows-1251" ?>
 <requests>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="102" request_sum="15.45"/>
   <request request_type="104" request_sum="16.45"/>
   <request request_type="101" request_sum="11.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="102" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="103" request_sum="15.45"/>
   <request request_type="101" request_sum="14.45"/>
   <request request_type="105" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="101" request_sum="11.45"/>
   <request request_type="106" request_sum="15.45"/>
   <request request_type="101" request_sum="12.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="107" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="102" request_sum="18.45"/>
   <request request_type="103" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
 </requests>
"
XMLValue
from dual
)
select
request_type
,count(*) request_count
,sum(request_sum) request_count
from
(
select
 extractvalue (value (XMLValue), "/request@request_type") request_type
,to_number(extractvalue (value (XMLValue), "/request@request_sum"),"999999999999.9999") request_sum
from
table
(
  xmlsequence
  (
   xmltype((
   select
    XMLValue
   from
    X
    )).extract ("/requests/request")
  )
) XMLValue
)
group by
 request_type
-- Начал 15:02
-- Закончил 15:12


Зазвиняюсь за задержку - начальник отвлек. Время честное.


 
ANB   (2008-05-04 15:15) [441]

Да. Реальное решение будет еще проще, т.к. я заранее перегоню клоб в переменную.


 
ANB   (2008-05-04 15:18) [442]

Для тех, у кого нету оракла ответ :

   REQUEST_TYPE REQUEST_COUNT REQUEST_COUNT
1 101 15 219.75
2 102 3 49.35
3 103 2 30.9
4 104 1 16.45
5 105 1 15.45
6 106 1 15.45
7 107 1 15.45


 
ANB   (2008-05-04 15:19) [443]

Ой. Накосячил чуток.
Код :

with X as
(
select
"<?xml version="1.0" encoding="windows-1251" ?>
 <requests>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="102" request_sum="15.45"/>
   <request request_type="104" request_sum="16.45"/>
   <request request_type="101" request_sum="11.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="102" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="103" request_sum="15.45"/>
   <request request_type="101" request_sum="14.45"/>
   <request request_type="105" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="101" request_sum="11.45"/>
   <request request_type="106" request_sum="15.45"/>
   <request request_type="101" request_sum="12.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="107" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
   <request request_type="102" request_sum="18.45"/>
   <request request_type="103" request_sum="15.45"/>
   <request request_type="101" request_sum="15.45"/>
 </requests>
"
XMLValue
from dual
)
select
request_type
,count(*) request_count
,sum(request_sum) request_sum
from
(
select
 extractvalue (value (XMLValue), "/request@request_type") request_type
,to_number(extractvalue (value (XMLValue), "/request@request_sum"),"999999999999.9999") request_sum
from
table
(
  xmlsequence
  (
   xmltype((
   select
    XMLValue
   from
    X
    )).extract ("/requests/request")
  )
) XMLValue
)
group by
 request_type

Ответ :
   REQUEST_TYPE REQUEST_COUNT REQUEST_SUM
1 101 15 219.75
2 102 3 49.35
3 103 2 30.9
4 104 1 16.45
5 105 1 15.45
6 106 1 15.45
7 107 1 15.45

Мона засчитать, что закончил в 15:19.


 
Palladin ©   (2008-05-04 15:25) [444]

procedure TForm1.Button1Click(Sender: TObject);
Type
PRec=^TRec;
TRec=Record
 Count:Integer;
 Sum:Currency;
End;

Var
theSource:TWRXMLElements;
theReqs:TWRXMLElements;
theResults:TWRIntegerMap;

nType:Integer;
fSum:Currency;

n,i:Integer;

Function _NewElement:PRec;
Begin
 New(Result);
 Result.Count:=0;
 Result.Sum:=0;
End;

begin
theResults:=TWRIntegerMap.Create;
Try
 theSource:=CreateWRXMLFromFile("c:\test.xml");
 Try
 
  If theSource.Count=2 Then theReqs:=theSource[1].Elements.ByName["request"] Else
  If theSource.Count=1 Then theReqs:=theSource[0].Elements.ByName["request"] Else Exit;
  If theReqs=Nil Then Exit;

  For i:=0 to theReqs.Count-1 Do
   Begin
    nType:=theReqs[i].AsInt["request_type"];
    fSum:=theReqs[i].AsCur["sum"];

    If Not theResults.Find(nType,n) Then theResults.Add_Integer(nType,Integer(_NewElement),n);
    Inc(PRec(theResults.IntegerData[n]).Count);
    With PRec(theResults.IntegerData[n])^ Do Sum:=Sum+fSum;
   End;

  For i:=0 to theResults.Count-1 Do
   With PRec(theResults.IntegerData[i])^ Do
    Memo1.Lines.Add("Type:"+IntToStr(theResults[i])+", Count:"+IntToStr(Count)+", Sum:"+CurrToStr(Sum));
   
 Finally
  theSource.Free;
 End;
Finally
 For i:=0 to theResults.Count-1 Do
  Dispose(PRec(theResults.IntegerData[i]));
 theResults.Free;
End;
end;


жду вопросов и претензий


 
Palladin ©   (2008-05-04 15:27) [445]

о как... мы оказывается не о делфи...


 
ANB   (2008-05-04 15:42) [446]


> о как... мы оказывается не о делфи...

1. Где было про делфи ?
2. Время больше моего
3. Код у меня явно короче
4. В Д7 у меня не компиляется (ругается на неизвестный тип WRXMLElements)
Что надо прикрутить в юзес ?


 
ANB   (2008-05-04 15:45) [447]

Претензии :
1. А где ООП то ?
2. По собственно коду претензий особо нету.
Но : For i:=0 to theResults.Count-1 Do
 Dispose(PRec(theResults.IntegerData[i])); меня слегка смущает. Это действительно безопасно ?


 
Palladin ©   (2008-05-04 15:56) [448]


> ANB   (04.05.08 15:45) [447]



> 1. А где ООП то ?

Везде, я оперирую тремя объектами.


> Но : For i:=0 to theResults.Count-1 Do
>  Dispose(PRec(theResults.IntegerData[i])); меня слегка смущает.
>  Это действительно безопасно ?

абсолютно


> 4. В Д7 у меня не компиляется (ругается на неизвестный тип
> WRXMLElements)
> Что надо прикрутить в юзес ?

Ничего не нужно, без моих библиотек он у тебя и не скомпилируется. В кратце:

TWRXMLElements,TWRXMLElements - классы представляющие элементы распарсенного XML файла

TWRIntegerMap - класс, карты ключ-значение


 
Восхищенный   (2008-05-04 15:59) [449]

> ANB   (04.05.08 15:45) [447]

> 1. А где ООП то ?

ООП как раз видно. Не видно ПП. Скорее, это ХП называется.
:о)


 
ANB   (2008-05-04 16:05) [450]


> TWRXMLElements,TWRXMLElements - классы представляющие элементы
> распарсенного XML файла

А про сторонние компоненты я тоже ничего не писал :) Но все соответствует задаче - чем удобнее, тем и пользуемся.


> Везде, я оперирую тремя объектами.

ИМХО : Использование готовых классов - это не совсем ООП. Иначе мона сказать, что я тока ООП и использую.


 
ANB   (2008-05-04 16:07) [451]

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


 
Palladin ©   (2008-05-04 16:21) [452]


> А про сторонние компоненты я тоже ничего не писал :)

Ну ты много чего не писал. Да и не сторонние они, они мои личные, и это не компоненты, а библиотека классов разработанная несколько лет назад. Она продолжает развиваться и дальше. XML, например, я реализовал совсем не давно. При чем развивается так, что старые проекты использовавшие эту библиотеку, продолжают компилироваться.


> ИМХО : Использование готовых классов - это не совсем ООП.

Это как раз ООП. Как ты думаешь, на кой нужны классы сами по себе? А никому они не нужны сами по себе. Они призваны решать какие-то задачи. Если ты ожидал, что я сейчас начну рождать систему из мелких классов для решения этой задачи, то ты ошибаешься, у меня набор конкретных классов, однажды написанных, и использование из в совокупности позволяет быстро решить, как эту задачу, так и множество других. Причем решение это интуитивно понятно для тех кто даже и не знает эти классы. Из названий методов и обращений можно догадаться что происходит.

А ты как поклонник ПП и противник ООП не должен пользоватся существующими классами, а разбить процедуру на подпроцедуры. Вот это и будет ПП.


 
Игорь Шевченко ©   (2008-05-04 16:28) [453]

Palladin ©   (04.05.08 15:25) [444]

Фаулер бы тебя с дерьмом смешал :)


 
ANB   (2008-05-04 16:28) [454]


> А ты как поклонник ПП и противник ООП не должен пользоватся
> существующими классами, а разбить процедуру на подпроцедуры.
>  Вот это и будет ПП.

Гм. Ну тогда я не поклонник ПП, наоборот - крутой ООП программер, т.к. готовыми классами активно пользовался и пользоваться буду. Т.к. удобно и быстро.
А вот свои классы буду как и раньше, писать, тока если очень надо будет и явно будут напрашиваться.

Кстати, твой результат с моим сошелся ?

И последнее - несмотря на использование готового НЕШТАТНОГО кода, я написал минимум втрое быстрее и раз в 5 короче. Причем с использованием штатных процедур сервера.


 
Palladin ©   (2008-05-04 16:28) [455]


> Игорь Шевченко ©   (04.05.08 16:28) [453]

А кто это и за что? позвольте поинтересоваться.. )


 
ANB   (2008-05-04 16:30) [456]


> Гм. Ну тогда я не поклонник ПП, наоборот - крутой ООП программер,
>  т.к. готовыми классами активно пользовался и пользоваться
> буду. Т.к. удобно и быстро.
> А вот свои классы буду как и раньше, писать, тока если очень
> надо будет и явно будут напрашиваться.

Смайлик забыл :)

ту ИШ : будь арбитром, сравни код :)


 
Восхищенный   (2008-05-04 16:31) [457]

> ANB   (04.05.08 16:28) [454]

А можно маленький вопрос - что будет, если понадобится перейти на другой сервер?
:о)


 
Palladin ©   (2008-05-04 16:38) [458]


> ANB   (04.05.08 16:28) [454]
> Кстати, твой результат с моим сошелся ?

я проверил прежде чем запостить...


> А вот свои классы буду как и раньше, писать, тока если очень
> надо будет и явно будут напрашиваться.

Ну вот видишь, вот и разница между нами только в том, что они у меня явно напрашиваются чаще чем у тебя. А все потому, что работаем мы в разных темах. Я разрабатываю фирменный сервер приложений и API для него. Причем один разрабатываю. Другие только пользуются API и пишут уже клиентские приложения. Да и серьезные приложения все равно тоже я пишу не могу другим доверить, а то нагородят... кроме полного переписывания в результате ничего не останется сделать...

А ты не знаю...


 
Anatoly Podgoretsky ©   (2008-05-04 16:39) [459]

> ANB  (04.05.2008 16:05:30)  [450]

Так один из плюсов ООП как раз и состоит в повторном использование кода, в том числе и чужого.


 
Игорь Шевченко ©   (2008-05-04 16:40) [460]

Palladin ©   (04.05.08 16:28) [455]


> А кто это


Мартин Фаулер такой. Программист. Автор книг по UML, Рефакторингу и архитектуре корпоративных приложений.


>  и за что?


За код, вестимо :)
Где блин инкапсуляция, полиморфизм и прочие там ... наследования ? :)
Что за глобальные переменные n,i ? :)

ANB   (04.05.08 16:30) [456]


> ту ИШ : будь арбитром, сравни код :)


Оба кода плохие - вручную посчитать гораздо быстрее.

или скачать из сети нечто, через XPath решающее нужную задачу без всякого оракла


 
Palladin ©   (2008-05-04 16:47) [461]


> Где блин инкапсуляция, полиморфизм и прочие там ... наследования
> ? :)

как это где? это все прекрасно используется в TWRIntegerMap и TWRXMLElements... )
но программисту-клиенту этого видеть и знать об этом и не нужно... )


> Что за глобальные переменные n,i ? :)

какие они глобальные, они очень даже локальные... :)


> Мартин Фаулер такой. Программист. Автор книг по UML, Рефакторингу
> и архитектуре корпоративных приложений.

не читал... а может и читал, только автора не запомнил...


 
ANB   (2008-05-04 16:48) [462]


> А можно маленький вопрос - что будет, если понадобится перейти
> на другой сервер?
> :о)

А зачем переходить на другой сервер ?

Проблема возникнет тока если подать на вход более 60 тысяч строк.
Тады придется разбирать XML руками.
Кистате, у Palladin этот вопрос решен ?


> Я разрабатываю фирменный сервер приложений

Трехслойка - самое хреновое новшество от МС.


 
ANB   (2008-05-04 16:51) [463]


> Оба кода плохие - вручную посчитать гораздо быстрее.

Дамс. Об этом варианте я не подумал.


> или скачать из сети нечто, через XPath решающее нужную задачу
> без всякого оракла

1. Эт еще надо найти, скачать и поставить, а оракл уже под рукой
2. Возможности SQL при этом отвалятся. Группировать, что - руками ?


 
Игорь Шевченко ©   (2008-05-04 16:53) [464]

Palladin ©   (04.05.08 16:47) [461]


> какие они глобальные, они очень даже локальные... :)


Прошу пардону. Увидел объявление переменных над функцией, решил, что глобальные. Рефлекс, знаете ли.

Вот может твой код и делает то, что надо, но он жутко неясный. Куча всяких деталей вида приведений типов, мелких локальных переменных сильно его загрязняет. Ну и немецкий язык тоже (это когда у объекта берется внутреннее свойство-объект и вызывается метод этого свойства) не проясняет логики

Foo.Elements.ByName(....)


 
Игорь Шевченко ©   (2008-05-04 16:53) [465]


> Группировать, что - руками ?


в Excel-е


 
Palladin ©   (2008-05-04 16:54) [466]


> Кистате, у Palladin этот вопрос решен ?

дело в том что у меня вообще никакого сервера не используется....


> Проблема возникнет тока если подать на вход более 60 тысяч
> строк.

это смешная цифра...


 
Игорь Шевченко ©   (2008-05-04 16:56) [467]

В Excel мне потребовалась ровно одна минута чтобы получить результат:

Названия столбцов      
101 102 103 104 105 106 107
sum 219,75 49,35 30,9 16,45 15,45 15,45 15,45
Общий итог
362,8


 
Игорь Шевченко ©   (2008-05-04 17:00) [468]

ANB   (04.05.08 16:51) [463]


> 1. Эт еще надо найти, скачать и поставить, а оракл уже под
> рукой
> 2. Возможности SQL при этом отвалятся. Группировать, что
> - руками ?


Видишь ли, Excel - он еще более у всех под рукой и не такой толстый, как оракл.

А если у тебя файл изменится, ты его по новой будешь в with вставлять ?


 
ANB   (2008-05-04 17:03) [469]


> дело в том что у меня вообще никакого сервера не используется.
> ...

Не, я не про это. Файл тысяч в 60 строк аналогичной структуры твой класс нормально съест ?

Просто XMLDom клинит начиная примерно с такого объема.

Мне пришлось писать парсер на клиенте.


> Игорь Шевченко ©   (04.05.08 16:56) [467]

Вот млин. Самая высокая скорость кодирования. Но опять таки это не ООП :)


 
Восхищенный   (2008-05-04 17:04) [470]

> ANB   (04.05.08 16:48) [462]

> А зачем переходить на другой сервер ?

А мало ли... например, появился новый заказчик со сходной задачей.. а у него Oracle не используется... да и вообще никакая СУБД не используется... а хочется повторного использования кода, а получается облом-с. Не лучше ли один раз написать, а потом юзать где угодно и сколько угодно?

Да и вообще, какое отношение имеет парсинг XML к серверам БД? Вот нужно XML-файл распарсить - так что ж, из-за этого всем клиентам Oracle ставить, что ли? Как то неправильно это, наверное... монстроидально как-то...


 
ANB   (2008-05-04 17:05) [471]


> А если у тебя файл изменится, ты его по новой будешь в with
> вставлять ?

Не. Это я для наглядности и простоты.
Так файл либо в табличку либо в параметр хранимки.


 
ANB   (2008-05-04 17:06) [472]


> Видишь ли, Excel - он еще более у всех под рукой и не такой
> толстый, как оракл.

Дистрибутив офиса скока весит ?


 
Palladin ©   (2008-05-04 17:11) [473]


> ANB   (04.05.08 17:03) [469]

Мой класс не является парсером, мой класс лишь представление данных, парсером я пользуюсь внешним... кстати MSXML... сейчас попробую создать большой xml файл и обработать...


 
Игорь Шевченко ©   (2008-05-04 17:14) [474]


> Дистрибутив офиса скока весит ?


Всяко легче дистрибутива Oracle

И в Excel-е больше народу умеют работать - поверь. Тот же Эрик Рэймонд пишет, что самый лучший путь решения - это не писать ничего, а найти средство, которое уже умеет решать нужную задачу. Если понадобиться - минимально его доработать (в случае с Excel - написать нужные макросы).


 
ANB   (2008-05-04 17:34) [475]


> И в Excel-е больше народу умеют работать - поверь. Тот же
> Эрик Рэймонд пишет, что самый лучший путь решения - это
> не писать ничего, а найти средство, которое уже умеет решать
> нужную задачу. Если понадобиться - минимально его доработать
> (в случае с Excel - написать нужные макросы).

+1. Согласен с "Эрик Рэймонд" на 100%.

У меня не получается на экселе выкрутится. Мне надо распарсенный XML в таблички разложить и хитро обработать. Но там уже много бизнес-кода.


> Всяко легче дистрибутива Oracle

Дистрибутив оракла весит примерно 260 метров. И ставится в течение 5 минут.


 
ANB   (2008-05-04 17:37) [476]


> Palladin ©   (04.05.08 17:11) [473]
>
> > ANB   (04.05.08 17:03) [469]
>
> Мой класс не является парсером, мой класс лишь представление
> данных, парсером я пользуюсь внешним... кстати MSXML...
> сейчас попробую создать большой xml файл и обработать...
>

Это не критика. Эт я пробить возможности. А то что то полезли объемы и не всегда мона отбится от XML формата обмена. Я одну дырку заткнул, где совсем падало. Но решение мне ни фига не понравилось - парсер на клиенте, XML разбираю руками, как строку. Вроде по скорости ничего - 100 тысяч чисто разбор - секунд 20. Но все вместе - полчаса. Все довольны, т.к. раньше по двое суток колбасило, без гарантии, что вообще что то получится (как правило оут оф мемори ловили).


 
Anatoly Podgoretsky ©   (2008-05-04 17:38) [477]

> ANB  (04.05.2008 16:51:43)  [463]

С Ораклом, как бы проще скачать, поставить и настроить. А когда оно сможет у человека нормально заработать?


 
Anatoly Podgoretsky ©   (2008-05-04 17:39) [478]

> ANB  (04.05.2008 17:06:52)  [472]

А вот я компьютера без Экселя не видел, а вот без Оракла сколько угодно, а точнее я вообще не видел компьютера с Ораклом.


 
Игорь Шевченко ©   (2008-05-04 17:42) [479]

ANB   (04.05.08 17:34) [475]


> Дистрибутив оракла весит примерно 260 метров


А то, что у меня 10.2.0.3 633 метра, так это просто случайность. И ставится малость подольше. Наверное машина медленная.


> У меня не получается на экселе выкрутится. Мне надо распарсенный
> XML в таблички разложить и хитро обработать. Но там уже
> много бизнес-кода.


Это уже другая задача ведь, а не та, которую ты привел ?

Я к другому - для довольно многих задач Excel вполне достаточен и умеющих им, Excel-ем пользоваться всяко больше, чем программистов всех мастей.

И для задач, подобных приведенной тобой, нет смысла соревноваться в скорости написания программы с ООП vs запрос для Oracle.


 
Игорь Шевченко ©   (2008-05-04 17:43) [480]

Anatoly Podgoretsky ©   (04.05.08 17:39) [478]


> а точнее я вообще не видел компьютера с Ораклом.


приезжай в Москву, покажу



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 16 17 вся ветка

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

Наверх




Память: 1.61 MB
Время: 0.167 c
4-1190539420
Jeeb
2007-09-23 13:23
2008.06.08
Список модемов Windows XP


15-1209124924
sql
2008-04-25 16:02
2008.06.08
MS SQL 2000


2-1208938664
Arinyshka
2008-04-23 12:17
2008.06.08
Освобождение ресурса в finally


15-1209307105
Turing machine
2008-04-27 18:38
2008.06.08
Turing Machine


8-1180951254
ZMRaven
2007-06-04 14:00
2008.06.08
Перемотка? Пропуск кадров?