powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вставка записи в дерево
12 сообщений из 12, страница 1 из 1
Вставка записи в дерево
    #40029654
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такое дерево:
Код: 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.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
select '1.' code from dual union all
select '1.1.' from dual union all
select '1.2.' from dual union all
select '1.3.' from dual union all
select '1.3.1.' from dual union all
select '1.3.1.1.' from dual union all
select '1.3.1.2.' from dual union all
select '1.3.2.' from dual union all
select '1.3.3.' from dual union all
select '1.4.' from dual union all
select '1.5.' from dual union all
select '1.6.' from dual union all
select '1.7.' from dual union all
select '2.' from dual union all
select '2.1.' from dual union all
select '2.1.1.' from dual union all
select '2.1.2.' from dual union all
select '2.1.3.' from dual union all
select '2.2.' from dual union all
select '2.2.1.' from dual union all
select '2.2.2.' from dual union all
select '2.3.' from dual union all
select '2.4.' from dual union all
select '2.5.' from dual union all
select '2.6.' from dual union all
select '2.7.' from dual union all
select '2.8.' from dual union all
select '2.8.1.' from dual union all
select '2.8.2.' from dual union all
select '2.8.3.' from dual union all
select '2.9.' from dual union all
select '2.9.1.' from dual union all
select '2.9.2.' from dual union all
select '2.9.3.' from dual union all
select '2.9.4.' from dual union all
select '2.9.5.' from dual union all
select '2.10.' from dual union all
select '2.10.1.' from dual union all
select '2.10.2.' from dual union all
select '2.10.3.' from dual union all
select '2.10.4.' from dual union all
select '2.11.' from dual union all
select '3.' from dual union all
select '3.1.' from dual union all
select '3.1.1.' from dual union all
select '3.1.2.' from dual union all
select '3.1.3.' from dual union all
select '3.1.4.' from dual union all
select '3.1.5.' from dual union all
select '3.1.6.' from dual union all
select '3.1.7.' from dual union all
select '3.1.8.' from dual union all
select '3.2.' from dual union all
select '3.2.1.' from dual union all
select '3.2.1.1.' from dual union all
select '3.2.1.2.' from dual union all
select '3.2.1.3.' from dual union all
select '3.2.1.4.' from dual union all
select '3.2.1.5.' from dual union all
select '3.2.1.6.' from dual union all
select '3.2.2.' from dual union all
select '3.2.2.1.' from dual union all
select '3.2.2.2.' from dual union all
select '3.2.2.3.' from dual union all
select '3.2.2.4.' from dual union all
select '3.2.2.5.' from dual union all
select '3.2.3.' from dual union all
select '3.2.4.' from dual union all
select '3.2.5.' from dual union all
select '3.2.6.' from dual union all
select '3.2.7.' from dual union all
select '3.2.8.' from dual union all
select '3.2.9.' from dual union all
select '3.2.10.' from dual union all
select '3.2.11.' from dual union all
select '3.2.12.' from dual union all
select '3.2.12.1.' from dual union all
select '3.2.12.2.' from dual union all
select '3.2.12.3.' from dual union all
select '3.2.12.4.' from dual union all
select '3.2.12.5.' from dual union all
select '3.2.12.6.' from dual union all
select '3.2.12.7.' from dual union all
select '3.2.12.8.' from dual union all
select '3.2.13.' from dual union all
select '3.2.14.' from dual union all
select '3.2.15.' from dual union all
select '3.2.16.' from dual union all
select '4.' from dual union all
select '4.1.' from dual union all
select '4.2.' from dual union all
select '4.3.' from dual union all
select '4.4.' from dual union all
select '4.5.' from dual union all
select '4.6.' from dual union all
select '5.' from dual union all
select '5.1.' from dual union all
select '5.1.1.' from dual union all
select '5.1.2.' from dual union all
select '5.1.3.' from dual union all
select '5.1.4.' from dual union all
select '5.1.5.' from dual union all
select '5.2.' from dual union all
select '5.2.1.' from dual union all
select '5.2.2.' from dual union all
select '5.2.3.' from dual union all
select '5.2.4.' from dual union all
select '5.3.' from dual union all
select '5.3.1.' from dual union all
select '5.3.2.' from dual union all
select '5.4.' from dual union all
select '5.4.1.' from dual union all
select '5.4.2.' from dual union all
select '5.5.' from dual union all
select '6.' from dual union all
select '6.1.' from dual union all
select '6.2.' from dual union all
select '6.3.' from dual union all
select '6.3.1.' from dual union all
select '6.3.2.' from dual union all
select '6.3.3.' from dual union all
select '6.3.4.' from dual union all
select '6.3.5.' from dual union all
select '6.4.' from dual union all
select '6.4.1.' from dual union all
select '6.4.2.' from dual union all
select '6.4.3.' from dual union all
select '6.5.' from dual union all
select '6.6.' from dual union all
select '7.' from dual union all
select '7.1.' from dual union all
select '7.1.1.' from dual union all
select '7.1.2.' from dual union all
select '7.2.' from dual union all
select '7.2.1.' from dual union all
select '7.2.2.' from dual union all
select '7.3.' from dual union all
select '7.4.' from dual union all
select '7.4.1.' from dual union all
select '7.4.2.' from dual union all
select '7.5.' from dual union all
select '7.6.' from dual union all
select '8.' from dual union all
select '8.1.' from dual union all
select '8.1.1.' from dual union all
select '8.1.2.' from dual union all
select '8.1.2.1.' from dual union all
select '8.1.2.2.' from dual union all
select '8.1.3.' from dual union all
select '8.1.4.' from dual union all
select '8.2.' from dual union all
select '8.2.1.' from dual union all
select '8.2.2.' from dual union all
select '8.2.2.1.' from dual union all
select '8.2.2.2.' from dual union all
select '8.2.2.3.' from dual union all
select '8.2.3.' from dual union all
select '8.2.4.' from dual union all
select '8.2.5.' from dual union all
select '8.3.' from dual union all
select '8.3.1.' from dual union all
select '8.3.2.' from dual union all
select '8.3.3.' from dual union all
select '8.3.4.' from dual union all
select '8.4.' from dual union all
select '9.' from dual union all
select '9.1.' from dual union all
select '9.2.' from dual union all
select '9.3.' from dual union all
select '9.4.' from dual union all
select '9.5.' from dual union all
select '9.6.' from dual union all
select '10.' from dual union all
select '10.1.' from dual union all
select '10.1.1.' from dual union all
select '10.1.2.' from dual union all
select '10.1.3.' from dual union all
select '10.2.' from dual union all
select '10.3.' from dual union all
select '10.4.' from dual union all
select '10.4.1.' from dual union all
select '10.4.2.' from dual union all
select '10.4.3.' from dual union all
select '10.5.' from dual union all
select '10.5.1.' from dual union all
select '10.5.2.' from dual union all
select '10.5.3.' from dual union all
select '10.5.4.' from dual union all
select '10.6.' from dual



Нужно вставить новый узел в произвольное место. Если кто-то решал такую задачу, то поделитесь, пожалуйста, решением.
...
Рейтинг: 0 / 0
Вставка записи в дерево
    #40029666
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic

Нужно вставить новый узел в произвольное место. Если кто-то решал такую задачу, то поделитесь, пожалуйста, решением.

Ставишь курсор на конец строки, нажимаешь клавишу ENTER и печатаешь свою строку.
...
Рейтинг: 0 / 0
Вставка записи в дерево
    #40029669
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|
Pastic

Нужно вставить новый узел в произвольное место. Если кто-то решал такую задачу, то поделитесь, пожалуйста, решением.

Ставишь курсор на конец строки, нажимаешь клавишу ENTER и печатаешь свою строку.


Там ещё нужно менять нумерацию сдвигаемых узлов.
...
Рейтинг: 0 / 0
Вставка записи в дерево
    #40029671
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|,

имхо

напр вставить после 8.2

8.3 станет 8.4
8.4 станет 8.5
8.5 станет 8.6
и тд

зы
готового нет
update .. like ... and >=

.....
stax
...
Рейтинг: 0 / 0
Вставка записи в дерево
    #40029677
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic
Нужно вставить новый узел в произвольное место

Например, для приведённого набора, что это означает для узла
Код: plsql
1.
select '10.8.16.255' from dual 


?
...
Рейтинг: 0 / 0
Вставка записи в дерево
    #40029679
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. надо ли дополнительно к нему добавлять узлы 1.7, 1.8, 1.8.1 .. 1.8.16, 1.8.16.1 .. 1.8.16.254 ?
...
Рейтинг: 0 / 0
Вставка записи в дерево
    #40029680
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
AlexFF__|,

имхо

напр вставить после 8.2

8.3 станет 8.4
8.4 станет 8.5
8.5 станет 8.6
и тд

зы
готового нет
update .. like ... and >=

.....
stax

Зачем?
Надо вставить между 8.2 и 8.2.1 => вставляешь 8.2.0.1
...
Рейтинг: 0 / 0
Вставка записи в дерево
    #40029682
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
т.е. надо ли дополнительно к нему добавлять узлы 1.7, 1.8, 1.8.1 .. 1.8.16, 1.8.16.1 .. 1.8.16.254 ?


Нет. Задача ставится так: вставляется узел вместо текущего. При этом нумерация текущего узла и нижележащих сдвигается. То есть, например, на место 7.5 вставляется новый узел. Тогда старый 7.5 становится 7.6 и т.д.

А при добавлении нового узла внизу нумерация проставляется автоматически на том же уровне. То есть, если надо вставить 10.7, то этот узел вставляется на том уровне, где находится 10.6, а если надо добавить узел 11, то он вставляется на том уровне, где находится узел 10.
...
Рейтинг: 0 / 0
Вставка записи в дерево
    #40029691
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic,

Переходите на хранение иерархии в структуре parent-child, тогда задача упрощается на порядок.
...
Рейтинг: 0 / 0
Вставка записи в дерево
    #40029772
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic

Нужно вставить новый узел в произвольное место. Если кто-то решал такую задачу, то поделитесь, пожалуйста, решением.


Что-то типа:

Код: 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.
with t1 as (
            select '&branch' branch from dual
           ),
     t2 as (
            select  substr(
                           branch,
                           1,
                           instr(branch,'.',-1,2)
                          ) parent_path,
                    to_number(
                              substr(
                                     branch,
                                     instr(branch,'.',-1,2) + 1
                                    )
                             ) node,
                    length(branch) - length(replace(branch,'.')) lvl
              from  t1
           )
 select  code old_code,
         case
           when code like parent_path ||'%'
             then case
                    when to_number(
                                   substr(
                                          substr(code,nvl(length(parent_path),0) + 1),
                                          1,
                                          instr(substr(code,nvl(length(parent_path),0) + 1),'.') - 1
                                         )
                                  ) >= node
                      then parent_path || (
                                           to_number(
                                                     substr(
                                                            substr(code,nvl(length(parent_path),0) + 1),
                                                            1,
                                                            instr(substr(code,nvl(length(parent_path),0) + 1),'.') - 1
                                                           )
                                                    ) + 1
                                          ) || substr(
                                                      code,
                                                      instr(code,'.',1,lvl)
                                                     )
                    else code
                  end
           else code
         end code
   from  tree,
         t2
union all
 select  null old_code,
         branch
   from  t1
/



Если производительность не так важна то можно упростить используя regexp_substr вместо substr/instr. Результаты:


Код: 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.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
Enter value for branch: 7.5.
old   2:             select '&branch' branch from dual
new   2:             select '7.5.' branch from dual

OLD_CODE   CODE
---------- ----------
1.         1.
1.1.       1.1.
1.2.       1.2.
1.3.       1.3.
1.3.1.     1.3.1.
1.3.1.1.   1.3.1.1.
1.3.1.2.   1.3.1.2.
1.3.2.     1.3.2.
1.3.3.     1.3.3.
1.4.       1.4.
1.5.       1.5.
1.6.       1.6.
1.7.       1.7.
2.         2.
2.1.       2.1.
2.1.1.     2.1.1.
2.1.2.     2.1.2.
2.1.3.     2.1.3.
2.2.       2.2.
2.2.1.     2.2.1.
2.2.2.     2.2.2.
2.3.       2.3.
2.4.       2.4.
2.5.       2.5.
2.6.       2.6.
2.7.       2.7.
2.8.       2.8.
2.8.1.     2.8.1.
2.8.2.     2.8.2.
2.8.3.     2.8.3.
2.9.       2.9.
2.9.1.     2.9.1.
2.9.2.     2.9.2.
2.9.3.     2.9.3.
2.9.4.     2.9.4.
2.9.5.     2.9.5.
2.10.      2.10.
2.10.1.    2.10.1.
2.10.2.    2.10.2.
2.10.3.    2.10.3.
2.10.4.    2.10.4.
2.11.      2.11.
3.         3.
3.1.       3.1.
3.1.1.     3.1.1.
3.1.2.     3.1.2.
3.1.3.     3.1.3.
3.1.4.     3.1.4.
3.1.5.     3.1.5.
3.1.6.     3.1.6.
3.1.7.     3.1.7.
3.1.8.     3.1.8.
3.2.       3.2.
3.2.1.     3.2.1.
3.2.1.1.   3.2.1.1.
3.2.1.2.   3.2.1.2.
3.2.1.3.   3.2.1.3.
3.2.1.4.   3.2.1.4.
3.2.1.5.   3.2.1.5.
3.2.1.6.   3.2.1.6.
3.2.2.     3.2.2.
3.2.2.1.   3.2.2.1.
3.2.2.2.   3.2.2.2.
3.2.2.3.   3.2.2.3.
3.2.2.4.   3.2.2.4.
3.2.2.5.   3.2.2.5.
3.2.3.     3.2.3.
3.2.4.     3.2.4.
3.2.5.     3.2.5.
3.2.6.     3.2.6.
3.2.7.     3.2.7.
3.2.8.     3.2.8.
3.2.9.     3.2.9.
3.2.10.    3.2.10.
3.2.11.    3.2.11.
3.2.12.    3.2.12.
3.2.12.1.  3.2.12.1.
3.2.12.2.  3.2.12.2.
3.2.12.3.  3.2.12.3.
3.2.12.4.  3.2.12.4.
3.2.12.5.  3.2.12.5.
3.2.12.6.  3.2.12.6.
3.2.12.7.  3.2.12.7.
3.2.12.8.  3.2.12.8.
3.2.13.    3.2.13.
3.2.14.    3.2.14.
3.2.15.    3.2.15.
3.2.16.    3.2.16.
4.         4.
4.1.       4.1.
4.2.       4.2.
4.3.       4.3.
4.4.       4.4.
4.5.       4.5.
4.6.       4.6.
5.         5.
5.1.       5.1.
5.1.1.     5.1.1.
5.1.2.     5.1.2.
5.1.3.     5.1.3.
5.1.4.     5.1.4.
5.1.5.     5.1.5.
5.2.       5.2.
5.2.1.     5.2.1.
5.2.2.     5.2.2.
5.2.3.     5.2.3.
5.2.4.     5.2.4.
5.3.       5.3.
5.3.1.     5.3.1.
5.3.2.     5.3.2.
5.4.       5.4.
5.4.1.     5.4.1.
5.4.2.     5.4.2.
5.5.       5.5.
6.         6.
6.1.       6.1.
6.2.       6.2.
6.3.       6.3.
6.3.1.     6.3.1.
6.3.2.     6.3.2.
6.3.3.     6.3.3.
6.3.4.     6.3.4.
6.3.5.     6.3.5.
6.4.       6.4.
6.4.1.     6.4.1.
6.4.2.     6.4.2.
6.4.3.     6.4.3.
6.5.       6.5.
6.6.       6.6.
7.         7.
7.1.       7.1.
7.1.1.     7.1.1.
7.1.2.     7.1.2.
7.2.       7.2.
7.2.1.     7.2.1.
7.2.2.     7.2.2.
7.3.       7.3.
7.4.       7.4.
7.4.1.     7.4.1.
7.4.2.     7.4.2.
7.5.       7.6.
7.6.       7.7.
8.         8.
8.1.       8.1.
8.1.1.     8.1.1.
8.1.2.     8.1.2.
8.1.2.1.   8.1.2.1.
8.1.2.2.   8.1.2.2.
8.1.3.     8.1.3.
8.1.4.     8.1.4.
8.2.       8.2.
8.2.1.     8.2.1.
8.2.2.     8.2.2.
8.2.2.1.   8.2.2.1.
8.2.2.2.   8.2.2.2.
8.2.2.3.   8.2.2.3.
8.2.3.     8.2.3.
8.2.4.     8.2.4.
8.2.5.     8.2.5.
8.3.       8.3.
8.3.1.     8.3.1.
8.3.2.     8.3.2.
8.3.3.     8.3.3.
8.3.4.     8.3.4.
8.4.       8.4.
9.         9.
9.1.       9.1.
9.2.       9.2.
9.3.       9.3.
9.4.       9.4.
9.5.       9.5.
9.6.       9.6.
10.        10.
10.1.      10.1.
10.1.1.    10.1.1.
10.1.2.    10.1.2.
10.1.3.    10.1.3.
10.2.      10.2.
10.3.      10.3.
10.4.      10.4.
10.4.1.    10.4.1.
10.4.2.    10.4.2.
10.4.3.    10.4.3.
10.5.      10.5.
10.5.1.    10.5.1.
10.5.2.    10.5.2.
10.5.3.    10.5.3.
10.5.4.    10.5.4.
10.6.      10.6.
           7.5.

190 rows selected.

Elapsed: 00:00:00.02
SQL> /
Enter value for branch: 8.
old   2:             select '&branch' branch from dual
new   2:             select '8.' branch from dual

OLD_CODE   CODE
---------- ----------
1.         1.
1.1.       1.1.
1.2.       1.2.
1.3.       1.3.
1.3.1.     1.3.1.
1.3.1.1.   1.3.1.1.
1.3.1.2.   1.3.1.2.
1.3.2.     1.3.2.
1.3.3.     1.3.3.
1.4.       1.4.
1.5.       1.5.
1.6.       1.6.
1.7.       1.7.
2.         2.
2.1.       2.1.
2.1.1.     2.1.1.
2.1.2.     2.1.2.
2.1.3.     2.1.3.
2.2.       2.2.
2.2.1.     2.2.1.
2.2.2.     2.2.2.
2.3.       2.3.
2.4.       2.4.
2.5.       2.5.
2.6.       2.6.
2.7.       2.7.
2.8.       2.8.
2.8.1.     2.8.1.
2.8.2.     2.8.2.
2.8.3.     2.8.3.
2.9.       2.9.
2.9.1.     2.9.1.
2.9.2.     2.9.2.
2.9.3.     2.9.3.
2.9.4.     2.9.4.
2.9.5.     2.9.5.
2.10.      2.10.
2.10.1.    2.10.1.
2.10.2.    2.10.2.
2.10.3.    2.10.3.
2.10.4.    2.10.4.
2.11.      2.11.
3.         3.
3.1.       3.1.
3.1.1.     3.1.1.
3.1.2.     3.1.2.
3.1.3.     3.1.3.
3.1.4.     3.1.4.
3.1.5.     3.1.5.
3.1.6.     3.1.6.
3.1.7.     3.1.7.
3.1.8.     3.1.8.
3.2.       3.2.
3.2.1.     3.2.1.
3.2.1.1.   3.2.1.1.
3.2.1.2.   3.2.1.2.
3.2.1.3.   3.2.1.3.
3.2.1.4.   3.2.1.4.
3.2.1.5.   3.2.1.5.
3.2.1.6.   3.2.1.6.
3.2.2.     3.2.2.
3.2.2.1.   3.2.2.1.
3.2.2.2.   3.2.2.2.
3.2.2.3.   3.2.2.3.
3.2.2.4.   3.2.2.4.
3.2.2.5.   3.2.2.5.
3.2.3.     3.2.3.
3.2.4.     3.2.4.
3.2.5.     3.2.5.
3.2.6.     3.2.6.
3.2.7.     3.2.7.
3.2.8.     3.2.8.
3.2.9.     3.2.9.
3.2.10.    3.2.10.
3.2.11.    3.2.11.
3.2.12.    3.2.12.
3.2.12.1.  3.2.12.1.
3.2.12.2.  3.2.12.2.
3.2.12.3.  3.2.12.3.
3.2.12.4.  3.2.12.4.
3.2.12.5.  3.2.12.5.
3.2.12.6.  3.2.12.6.
3.2.12.7.  3.2.12.7.
3.2.12.8.  3.2.12.8.
3.2.13.    3.2.13.
3.2.14.    3.2.14.
3.2.15.    3.2.15.
3.2.16.    3.2.16.
4.         4.
4.1.       4.1.
4.2.       4.2.
4.3.       4.3.
4.4.       4.4.
4.5.       4.5.
4.6.       4.6.
5.         5.
5.1.       5.1.
5.1.1.     5.1.1.
5.1.2.     5.1.2.
5.1.3.     5.1.3.
5.1.4.     5.1.4.
5.1.5.     5.1.5.
5.2.       5.2.
5.2.1.     5.2.1.
5.2.2.     5.2.2.
5.2.3.     5.2.3.
5.2.4.     5.2.4.
5.3.       5.3.
5.3.1.     5.3.1.
5.3.2.     5.3.2.
5.4.       5.4.
5.4.1.     5.4.1.
5.4.2.     5.4.2.
5.5.       5.5.
6.         6.
6.1.       6.1.
6.2.       6.2.
6.3.       6.3.
6.3.1.     6.3.1.
6.3.2.     6.3.2.
6.3.3.     6.3.3.
6.3.4.     6.3.4.
6.3.5.     6.3.5.
6.4.       6.4.
6.4.1.     6.4.1.
6.4.2.     6.4.2.
6.4.3.     6.4.3.
6.5.       6.5.
6.6.       6.6.
7.         7.
7.1.       7.1.
7.1.1.     7.1.1.
7.1.2.     7.1.2.
7.2.       7.2.
7.2.1.     7.2.1.
7.2.2.     7.2.2.
7.3.       7.3.
7.4.       7.4.
7.4.1.     7.4.1.
7.4.2.     7.4.2.
7.5.       7.5.
7.6.       7.6.
8.         9.
8.1.       9.1.
8.1.1.     9.1.1.
8.1.2.     9.1.2.
8.1.2.1.   9.1.2.1.
8.1.2.2.   9.1.2.2.
8.1.3.     9.1.3.
8.1.4.     9.1.4.
8.2.       9.2.
8.2.1.     9.2.1.
8.2.2.     9.2.2.
8.2.2.1.   9.2.2.1.
8.2.2.2.   9.2.2.2.
8.2.2.3.   9.2.2.3.
8.2.3.     9.2.3.
8.2.4.     9.2.4.
8.2.5.     9.2.5.
8.3.       9.3.
8.3.1.     9.3.1.
8.3.2.     9.3.2.
8.3.3.     9.3.3.
8.3.4.     9.3.4.
8.4.       9.4.
9.         10.
9.1.       10.1.
9.2.       10.2.
9.3.       10.3.
9.4.       10.4.
9.5.       10.5.
9.6.       10.6.
10.        11.
10.1.      11.1.
10.1.1.    11.1.1.
10.1.2.    11.1.2.
10.1.3.    11.1.3.
10.2.      11.2.
10.3.      11.3.
10.4.      11.4.
10.4.1.    11.4.1.
10.4.2.    11.4.2.
10.4.3.    11.4.3.
10.5.      11.5.
10.5.1.    11.5.1.
10.5.2.    11.5.2.
10.5.3.    11.5.3.
10.5.4.    11.5.4.
10.6.      11.6.
           8.

190 rows selected.

Elapsed: 00:00:00.02
SQL>




SY.
...
Рейтинг: 0 / 0
Вставка записи в дерево
    #40029783
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, большое спасибо.

Вот так работает (с regexp_replace):

Код: 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.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
with t1 as (
            select '7.5' branch from dual
           ),
     t2 as (
            select  substr(
                           branch,
                           1,
                           instr(branch,'.',-1,2)
                          ) parent_path,
                    to_number(regexp_replace(
                              substr(
                                     branch,
                                     instr(branch,'.',-1,2) + 1
                                    )
                             , '\D')) node,
                    length(branch) - length(replace(branch,'.')) lvl
              from  t1
           ),
     tree as
     (select '1.' code from dual union all
select '1.1.' from dual union all
select '1.2.' from dual union all
select '1.3.' from dual union all
select '1.3.1.' from dual union all
select '1.3.1.1.' from dual union all
select '1.3.1.2.' from dual union all
select '1.3.2.' from dual union all
select '1.3.3.' from dual union all
select '1.4.' from dual union all
select '1.5.' from dual union all
select '1.6.' from dual union all
select '1.7.' from dual union all
select '2.' from dual union all
select '2.1.' from dual union all
select '2.1.1.' from dual union all
select '2.1.2.' from dual union all
select '2.1.3.' from dual union all
select '2.2.' from dual union all
select '2.2.1.' from dual union all
select '2.2.2.' from dual union all
select '2.3.' from dual union all
select '2.4.' from dual union all
select '2.5.' from dual union all
select '2.6.' from dual union all
select '2.7.' from dual union all
select '2.8.' from dual union all
select '2.8.1.' from dual union all
select '2.8.2.' from dual union all
select '2.8.3.' from dual union all
select '2.9.' from dual union all
select '2.9.1.' from dual union all
select '2.9.2.' from dual union all
select '2.9.3.' from dual union all
select '2.9.4.' from dual union all
select '2.9.5.' from dual union all
select '2.10.' from dual union all
select '2.10.1.' from dual union all
select '2.10.2.' from dual union all
select '2.10.3.' from dual union all
select '2.10.4.' from dual union all
select '2.11.' from dual union all
select '3.' from dual union all
select '3.1.' from dual union all
select '3.1.1.' from dual union all
select '3.1.2.' from dual union all
select '3.1.3.' from dual union all
select '3.1.4.' from dual union all
select '3.1.5.' from dual union all
select '3.1.6.' from dual union all
select '3.1.7.' from dual union all
select '3.1.8.' from dual union all
select '3.2.' from dual union all
select '3.2.1.' from dual union all
select '3.2.1.1.' from dual union all
select '3.2.1.2.' from dual union all
select '3.2.1.3.' from dual union all
select '3.2.1.4.' from dual union all
select '3.2.1.5.' from dual union all
select '3.2.1.6.' from dual union all
select '3.2.2.' from dual union all
select '3.2.2.1.' from dual union all
select '3.2.2.2.' from dual union all
select '3.2.2.3.' from dual union all
select '3.2.2.4.' from dual union all
select '3.2.2.5.' from dual union all
select '3.2.3.' from dual union all
select '3.2.4.' from dual union all
select '3.2.5.' from dual union all
select '3.2.6.' from dual union all
select '3.2.7.' from dual union all
select '3.2.8.' from dual union all
select '3.2.9.' from dual union all
select '3.2.10.' from dual union all
select '3.2.11.' from dual union all
select '3.2.12.' from dual union all
select '3.2.12.1.' from dual union all
select '3.2.12.2.' from dual union all
select '3.2.12.3.' from dual union all
select '3.2.12.4.' from dual union all
select '3.2.12.5.' from dual union all
select '3.2.12.6.' from dual union all
select '3.2.12.7.' from dual union all
select '3.2.12.8.' from dual union all
select '3.2.13.' from dual union all
select '3.2.14.' from dual union all
select '3.2.15.' from dual union all
select '3.2.16.' from dual union all
select '4.' from dual union all
select '4.1.' from dual union all
select '4.2.' from dual union all
select '4.3.' from dual union all
select '4.4.' from dual union all
select '4.5.' from dual union all
select '4.6.' from dual union all
select '5.' from dual union all
select '5.1.' from dual union all
select '5.1.1.' from dual union all
select '5.1.2.' from dual union all
select '5.1.3.' from dual union all
select '5.1.4.' from dual union all
select '5.1.5.' from dual union all
select '5.2.' from dual union all
select '5.2.1.' from dual union all
select '5.2.2.' from dual union all
select '5.2.3.' from dual union all
select '5.2.4.' from dual union all
select '5.3.' from dual union all
select '5.3.1.' from dual union all
select '5.3.2.' from dual union all
select '5.4.' from dual union all
select '5.4.1.' from dual union all
select '5.4.2.' from dual union all
select '5.5.' from dual union all
select '6.' from dual union all
select '6.1.' from dual union all
select '6.2.' from dual union all
select '6.3.' from dual union all
select '6.3.1.' from dual union all
select '6.3.2.' from dual union all
select '6.3.3.' from dual union all
select '6.3.4.' from dual union all
select '6.3.5.' from dual union all
select '6.4.' from dual union all
select '6.4.1.' from dual union all
select '6.4.2.' from dual union all
select '6.4.3.' from dual union all
select '6.5.' from dual union all
select '6.6.' from dual union all
select '7.' from dual union all
select '7.1.' from dual union all
select '7.1.1.' from dual union all
select '7.1.2.' from dual union all
select '7.2.' from dual union all
select '7.2.1.' from dual union all
select '7.2.2.' from dual union all
select '7.3.' from dual union all
select '7.4.' from dual union all
select '7.4.1.' from dual union all
select '7.4.2.' from dual union all
select '7.5.' from dual union all
select '7.6.' from dual union all
select '8.' from dual union all
select '8.1.' from dual union all
select '8.1.1.' from dual union all
select '8.1.2.' from dual union all
select '8.1.2.1.' from dual union all
select '8.1.2.2.' from dual union all
select '8.1.3.' from dual union all
select '8.1.4.' from dual union all
select '8.2.' from dual union all
select '8.2.1.' from dual union all
select '8.2.2.' from dual union all
select '8.2.2.1.' from dual union all
select '8.2.2.2.' from dual union all
select '8.2.2.3.' from dual union all
select '8.2.3.' from dual union all
select '8.2.4.' from dual union all
select '8.2.5.' from dual union all
select '8.3.' from dual union all
select '8.3.1.' from dual union all
select '8.3.2.' from dual union all
select '8.3.3.' from dual union all
select '8.3.4.' from dual union all
select '8.4.' from dual union all
select '9.' from dual union all
select '9.1.' from dual union all
select '9.2.' from dual union all
select '9.3.' from dual union all
select '9.4.' from dual union all
select '9.5.' from dual union all
select '9.6.' from dual union all
select '10.' from dual union all
select '10.1.' from dual union all
select '10.1.1.' from dual union all
select '10.1.2.' from dual union all
select '10.1.3.' from dual union all
select '10.2.' from dual union all
select '10.3.' from dual union all
select '10.4.' from dual union all
select '10.4.1.' from dual union all
select '10.4.2.' from dual union all
select '10.4.3.' from dual union all
select '10.5.' from dual union all
select '10.5.1.' from dual union all
select '10.5.2.' from dual union all
select '10.5.3.' from dual union all
select '10.5.4.' from dual union all
select '10.6.' from dual)
 select  code old_code,
         case
           when code like parent_path ||'%'
             then case
                    when to_number(regexp_replace(
                                   substr(
                                          substr(code,nvl(length(parent_path),0) + 1),
                                          1,
                                          instr(substr(code,nvl(length(parent_path),0) + 1),'.') - 1
                                         )
                                  , '\D')) >= node
                      then parent_path || (
                                           to_number(regexp_replace(
                                                     substr(
                                                            substr(code,nvl(length(parent_path),0) + 1),
                                                            1,
                                                            instr(substr(code,nvl(length(parent_path),0) + 1),'.') - 1
                                                           )
                                                    , '\D')) + 1
                                          ) || substr(
                                                      code,
                                                      instr(code,'.',1,lvl)
                                                     )
                    else code
                  end
           else code
         end code
   from  tree,
         t2
union all
 select  null old_code,
         branch
   from  t1
...
Рейтинг: 0 / 0
Вставка записи в дерево
    #40029822
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic


Вот так работает (с regexp_replace):


Сказав A скажи и Б:

Код: 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.
with t1 as (
            select '&branch' branch from dual
           ),
     t2 as (
            select  regexp_replace(
                                   branch,
                                   '\d+\.$'
                                  ) parent_path,
                    to_number(
                              regexp_substr(
                                            branch,
                                            '\d+\.$'
                                           )
                             ) node,
                    regexp_count(branch,'\.') lvl
              from  t1
           )
 select  code old_code,
         case
           when code like parent_path ||'%'
             then case
                    when to_number(
                                   regexp_substr(code,'\d+',nvl(length(parent_path),0) + 1)
                                  ) >= node
                      then parent_path || (
                                           to_number(
                                                     regexp_substr(code,'\d+',nvl(length(parent_path),0) + 1)
                                                    ) + 1
                                          ) || substr(
                                                      code,
                                                      instr(code,'.',1,lvl)
                                                     )
                    else code
                  end
           else code
         end code
   from  tree,
         t2
union all
 select  null old_code,
         branch
   from  t1
/



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


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