powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Пример работы с иерархическими запросами в ASA9
1 сообщений из 1, страница 1 из 1
Пример работы с иерархическими запросами в ASA9
    #32321127
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня попросили по ссылке http://www.oracle.com/oramag/code/index.html?cod06106.html , где представлен один из способов борьбы с сортировкой в иерархических запросах Оракла, прокомментировать, можно ли такое сотворить в ASA. Оказалось, что в 9 версии не только можно, но и сделать это гораздо легче и красивее, чем в предложенной статье для Оракла.

Выставляю сюда это решение, чтобы кто еще не работал с такими запросами смог понять, как это правильно делать в ASA:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
begin
      -- Create hierarchy table 
 
     declare local temporary table Universe( 
      Parent VARCHAR( 30 ),
      Name  VARCHAR( 30 ) PRIMARY KEY 
     ); 
      
      -- Some test data 
 
     INSERT INTO Universe VALUES ( NULL, 'World' ) ;  
     INSERT INTO Universe VALUES ( 'World', 'Europe' ) ;  
     INSERT INTO Universe VALUES ( 'Europe', 'England' ) ; 
     INSERT INTO Universe VALUES ( 'Europe', 'The Netherlands' ) ;  
     INSERT INTO Universe VALUES ( 'Europe', 'Germany' ) ;  
     INSERT INTO Universe VALUES ( 'World', 'Asia' ) ;  
     INSERT INTO Universe VALUES ( 'Asia', 'Japan' ) ;  
     INSERT INTO Universe VALUES ( 'Asia', 'China' ) ;  
     INSERT INTO Universe VALUES ( 'World', 'America' ) ; 
     INSERT INTO Universe VALUES ( 'America', 'United States' ) ;  
     INSERT INTO Universe VALUES ( 'America', 'Mexico' ) ; 
     INSERT INTO Universe VALUES ( 'World', 'Africa' ) ;  
     INSERT INTO Universe VALUES ( 'Africa', 'Egypt' ) ;  
     INSERT INTO Universe VALUES ( 'Africa', 'Morocco' ) ; 

     WITH RECURSIVE
       HUniverse ( Name, Parent, Level, Path ) AS (
         SELECT Name, Parent,  0 , Name
         FROM Universe
         WHERE Parent IS NULL
       UNION ALL 
         SELECT u.Name, u.Parent, h.Level +  1 , h.Path + '/' + u.Name
         FROM Universe u
           INNER JOIN HUniverse h ON h.Name = u.Parent AND h.Name <> u.Name
         WHERE u.Parent IS NOT NULL
       )
       SELECT Space( Level *  5  ) || Trim(Name) AS LevelName
       FROM HUniverse
       ORDER BY Path;
end


На выходе получим результат сортировки, аналогичный приведенному в статье с функцией, по которой идет сортировка. По идее решение на ASA должно работать быстрее, так как в нем не используется функция, которая на каждую запись, да еще и в цикле лопатит таблицу и генерит значение для сортировки. Хотя я Оракл не знаю, по этому не уверен, может у них там все это быстрее работает, это уж надо Ораклистов спрашивать.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Пример работы с иерархическими запросами в ASA9
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]