Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Иерархические таблицы, запросы, работа с данными в Oracle / 6 сообщений из 6, страница 1 из 1
03.12.2017, 16:54
    #39563302
gsvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархические таблицы, запросы, работа с данными в Oracle
База: Oracle Database 11g Release 2
/*
* На работе пришлось столкнуться иерархическими таблицами, их приминением, использованием и работой с данными.
* !!! Вопрос вот в чем: !!!
* Где можно почитать и изучить методы, скрипты для работы и иерархическими таблицами.
* Вчера весь день провисел в интернете, а толку мало, все как то разрозненно и в основном по MySQL.
* Или свои сбросите если Вам не сложно.
* А необходимо именно: Удалить ветку, Вставить ветку, Переместить ветку, Внести изменения в ветку.
* А использовать уже надо и надо было вчера :(( .

* На пример:
* 1. Переместить ООО "Тимаренис" в Москва
* 2. Удалить ветку всю ветку /Лиски/ЛискиПресс
* 3. Вставить ветку /Смоленск/Городская больница/Палата №6
*/
-- Что мы имеем:
Код: plsql
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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
-- создаем тестовую таблицу
CREATE TABLE TEST_TABLE_HIERARCH (
          id NUMBER,
          pid NUMBER,
          title VARCHAR2(256) );

-- заполняем ее данными
BEGIN
    INSERT ALL
      INTO TEST_TABLE_HIERARCH (id, pid, title) VALUES (1,  null, 'Россия')
      INTO TEST_TABLE_HIERARCH (id, pid, title) VALUES (2,  1,    'Воронеж')
      INTO TEST_TABLE_HIERARCH (id, pid, title) VALUES (3,  2,    'ООО "Тимаренис"')
      INTO TEST_TABLE_HIERARCH (id, pid, title) VALUES (4,  1,    'Москва')
      INTO TEST_TABLE_HIERARCH (id, pid, title) VALUES (5,  1,    'Лиски')
      INTO TEST_TABLE_HIERARCH (id, pid, title) VALUES (6,  3,    'Главный офис')
      INTO TEST_TABLE_HIERARCH (id, pid, title) VALUES (7,  3,    'Офис 1')
      INTO TEST_TABLE_HIERARCH (id, pid, title) VALUES (8,  3,    'Офис 2')
      INTO TEST_TABLE_HIERARCH (id, pid, title) VALUES (9,  8,    'Сервер 1')
      INTO TEST_TABLE_HIERARCH (id, pid, title) VALUES (10, 5,    'ЛискиПресс')
    SELECT * FROM dual;
    COMMIT;
END;

-- Есть методы выборки/ селекта из иерархической таблицы и проверка её на зацикливание и т.д.
SELECT 
      CONNECT_BY_ISLEAF as isleaf,             --  наличие вложенности дальше
      LEVEL,                                                --  уровень вложенности
      id,
      pid,
      title,
      PRIOR title as prior_ ,                         -- родитель
      CONNECT_BY_ROOT title as root,        -- корень
      LPAD(' ', 3*level)||title as dir_,           -- наглядное пример вложенности
      SYS_CONNECT_BY_PATH(title, '/') AS v_path  -- соединение вложенности в строку с разделением "/"
  FROM TEST_TABLE_HIERARCH
  START WITH pid IS NULL                        -- с какой позиции начинаем выбирать иерархию
  CONNECT BY PRIOR id = pid                   -- соединение сына id с родителем id
  ORDER SIBLINGS BY title;                      -- сортируем внутри иерархии
  
-- Выведем древо/ветви этой таблицы
SELECT SYS_CONNECT_BY_PATH(title, '/') as v_path
  FROM TEST_TABLE_HIERARCH
  START WITH pid IS NULL                    
  CONNECT BY PRIOR id = pid                 
  ORDER SIBLINGS BY title;                  
  
-- Имеем результат:
V_PATH
--------------------------------------------
/Россия
/Россия/Воронеж
/Россия/Воронеж/ООО "Тимаренис"
/Россия/Воронеж/ООО "Тимаренис"/Главный офис
/Россия/Воронеж/ООО "Тимаренис"/Офис 1
/Россия/Воронеж/ООО "Тимаренис"/Офис 2
/Россия/Воронеж/ООО "Тимаренис"/Офис 2/Сервер 1
/Россия/Лиски
/Россия/Лиски/ЛискиПресс
/Россия/Москва
       
...
Рейтинг: 0 / 0
03.12.2017, 20:50
    #39563363
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархические таблицы, запросы, работа с данными в Oracle
1.

Код: plsql
1.
update TEST_TABLE_HIERARCH set PID = 4 where ID = 3;



2.

Код: plsql
1.
2.
3.
4.
5.
6.
delete from  TEST_TABLE_HIERARCH
where id in (
select id from TEST_TABLE_HIERARCH
START WITH id = 5
CONNECT BY PRIOR id = pid
);



3.

Код: plsql
1.
2.
3.
insert into TEST_TABLE_HIERARCH VALUES (11, 1, 'Смоленск');  
insert into TEST_TABLE_HIERARCH VALUES (12, 11, 'Городская больница');
insert into TEST_TABLE_HIERARCH VALUES (13, 12, 'Палата N6');
...
Рейтинг: 0 / 0
05.12.2017, 15:16
    #39564465
gsvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархические таблицы, запросы, работа с данными в Oracle
Спасибо!!!!
...
Рейтинг: 0 / 0
05.12.2017, 15:17
    #39564466
gsvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархические таблицы, запросы, работа с данными в Oracle
Спасибо!!!
...
Рейтинг: 0 / 0
05.12.2017, 18:08
    #39564632
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархические таблицы, запросы, работа с данными в Oracle
Надо же, исчезающий вид, благодарные студенты.
...
Рейтинг: 0 / 0
05.12.2017, 22:51
    #39564741
gsvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархические таблицы, запросы, работа с данными в Oracle
Увы ребята, я не студент. Хотя было бы приятно снова им стать. Я им перестал быть 25 лет назад. ).
Решил вернуться обратно в свою основную профессию. :)). Знаю, что сложно, но трудностей я не боюсь. Дерзайте и вы высокие пики и Вам воздастся. По - этому всем выражаю свою благодарность за оказанную мне помощь сейчас и в дальнейшем.

С уважением

GSVG.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Иерархические таблицы, запросы, работа с данными в Oracle / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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