powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
25 сообщений из 32, страница 1 из 2
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885424
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH T AS
(
SELECT 7960 ID, 5529 parent_id, 'Груз. ******. ППП- ********** д/о 7 дней'  NAME FROM dual UNION ALL
SELECT 7961 ID, 7960 parent_id, '*****'                                     NAME FROM dual UNION ALL
SELECT 7962 ID, 7961 parent_id, '******** наставник **-1'                   NAME FROM dual UNION ALL
SELECT 5530 ID, 5529 parent_id, 'Т**** ************ ********'               NAME FROM dual UNION ALL
SELECT 5531 ID, 5530 parent_id, '**** 2'                                    NAME FROM dual UNION ALL
SELECT 5536 ID, 5531 parent_id, 'ЗАКРЫТА----'                               NAME FROM dual
)
SELECT T.*,
       SYS_CONNECT_BY_PATH(NAME, '->')
  FROM T
 start WITH parent_id = 5529
connect BY parent_id = PRIOR ID
ORDER SIBLINGS BY parent_id NULLS FIRST,        NAME

ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить разделитель как часть значения столбца


если убрать сортировку или просто SIBLINGS
или в слове "ЗАКРЫТА----" убрать последний минус
или в слове "Т**** ************ ********" заменить букву Т на звездочку
-- то начинает работать


Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
NLS_SORT=RUSSIAN
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885432
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,
Похоже чето NLS зависимое.
на моей базе (в смысле - клиенте) NLS_LANG=AMERICAN_AMERICA.AL32UTF8 если че

не знаю, у меня работает
Код: 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.
SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

SQL>
SQL> alter session set NLS_SORT=RUSSIAN;

Session altered.

SQL>
SQL> WITH T AS
  2  (
  3  SELECT 7960 ID, 5529 parent_id, 'Груз. ******. ППП- ********** д/о 7 дней'  NAME FROM dual UNION ALL
  4  SELECT 7961 ID, 7960 parent_id, '*****'                                     NAME FROM dual UNION ALL
  5  SELECT 7962 ID, 7961 parent_id, '******** наставник **-1'            NAME FROM dual UNION ALL
  6  SELECT 5530 ID, 5529 parent_id, 'Т**** ************ ********'                NAME FROM dual UNION ALL
  7  SELECT 5531 ID, 5530 parent_id, '**** 2'                                    NAME FROM dual UNION ALL
  8  SELECT 5536 ID, 5531 parent_id, 'ЗАКРЫТА----'                              NAME FROM dual
  9  )
 10  SELECT T.*,
 11         SYS_CONNECT_BY_PATH(NAME, '->')
 12    FROM T
 13   start WITH parent_id = 5529
 14  connect BY parent_id = PRIOR ID
 15  ORDER SIBLINGS BY parent_id NULLS FIRST,        NAME
 16  ;

        ID  PARENT_ID NAME
---------- ---------- --------------------
SYS_CONNECT_BY_PATH(NAME,'->')
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      7960       5529 Груз. ******. ППП- *
                      ********* д/о 7 дней
->Груз. ******. ППП- ********** д/о 7 дней

      7961       7960 *****
->Груз. ******. ППП- ********** д/о 7 дней->*****

      7962       7961 ******** наставник *
                      *-1
->Груз. ******. ППП- ********** д/о 7 дней->*****->******** наставник **-1

      5530       5529 Т**** ************ *
                      *******
->Т**** ************ ********

      5531       5530 **** 2
->Т**** ************ ********->**** 2

      5536       5531 ЗАКРЫТА----
->Т**** ************ ********->**** 2->ЗАКРЫТА----


6 rows selected.

...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885434
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще есть Bug 6392572 якобы пофикшеный в 11.2.0.2, вроде как workaround - материализовать
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885454
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
NLS_SORT=RUSSIAN
На 1251 падает, на utf8 - нет. На разных версиях. Вывод напрашивается.
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885455
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пришлось юзера попросить убрать эти минусы
т.к. ему срочно, а запрос прописан в 4 разных прогах
и все ему оказались нужны сразу
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885457
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
срочн
Ну так поменял поменял бы NLS_SORT
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885471
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
andreymx
срочн
Ну так поменял поменял бы NLS_SORT
менять в сессии? не так просто
а запрос я и так уже переписал
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885513
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
ElicНу так поменял поменял бы NLS_SORT
менять в сессии? не так простоLogon trigger. Но со своими толпами замшелых тараканов разбираться тебе самому.
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885518
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
Код: plsql
1.
SYS_CONNECT_BY_PATH(NAME, '->')

В доке параметр обозначен как char , что намекает на единственность символа в разделителе. Использование минуса одновременно в разделителе и в данных - на свой страх и риск.
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885520
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-
В доке параметр обозначен как char , что намекает на единственность символа в разделителе.
Интересное наблюдение. Потенциально рушит многие использования SYS_CONNECT_BY_PATH :|
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885521
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYS_CONNECT_BY_PATH
Syntax

Description of sys_connect_by_path.gif follows
Description of the illustration sys_connect_by_path.gif

Purpose

SYS_CONNECT_BY_PATH is valid only in hierarchical queries. It returns the path of a column value from root to node, with column values separated by char for each row returned by CONNECT BY condition.

Both column and char can be any of the datatypes CHAR, VARCHAR2, NCHAR, or NVARCHAR2. The string returned is of VARCHAR2 datatype and is in the same character set as column.


Намёк есть, но явного ограничения на длину не нашёл
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885522
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал перед вызовом функции реплейс минуса в chr(1), а после обратно в минус
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #39885523
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щаз подумал
Лучше, наверное, в качестве чара передавать chr(1), а затем менять его на ->
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #40096236
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опять звезды сошлись
пуст полежит

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
WITH nstr AS(
SELECT 940 AS STR_ID, 'ааа. ааяаа'              AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 950 AS STR_ID, 'аааааааа ааяаав, ваага'  AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 972 AS STR_ID, '- аааактааа'             AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 973 AS STR_ID, '- аааактааа'             AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 980 AS STR_ID, 'ааа'                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 981 AS STR_ID, 'Оааа ааа г/к пааката'    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 982 AS STR_ID, 'Оааа ааа г/к пааката '   AS STR_NAME, 981                  AS PARENT_STR_ID FROM DUAL
)
            SELECT SYS_CONNECT_BY_PATH(nstr.str_name, ' / ') PATH,
                   nstr.str_id,
                   LEVEL
              FROM nstr
             START WITH nstr.parent_str_id IS NULL 
           CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id




ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить разделитель как часть значения столбца
версия с первого поста не поменялась
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #40096475
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
опять звезды сошлись пуст полежит

Интересно было бы увидеть точную версию СУБД, содержимое nls_DATABASE_parameters и nls_SESSION_parameters сессии, в которой оно падает.
Пытался подобрать комбинацию чтобы воспроизвести - пока не получилось.
То есть понятно, что ломается оно на строке 'Оааа ааа г/к пааката', но почему игнорит пробелы в разделителе - осталось неясным.
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #40096483
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Если убрать хотя бы одну любую букву почти в любой строке - падать перестаёт
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #40096486
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Код: 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.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  1  WITH nstr AS(
  2  SELECT 940 AS STR_ID, 'ааа. ааяаа'              AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
  3  SELECT 950 AS STR_ID, 'аааааааа ааяаав, ваага'  AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION ALL
  4  SELECT 972 AS STR_ID, '- аааактааа'             AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION ALL
  5  SELECT 973 AS STR_ID, '- аааактааа'             AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION ALL
  6  SELECT 980 AS STR_ID, 'ааа'                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
  7  SELECT 981 AS STR_ID, 'Оааа ааа г/к пааката'    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL UNION ALL
  8  SELECT 982 AS STR_ID, 'Оааа ааа г/к пааката '   AS STR_NAME, 981                  AS PARENT_STR_ID FROM DUAL
  9  )
 10              SELECT SYS_CONNECT_BY_PATH(nstr.str_name, ' \ ') PATH,
 11                     nstr.str_id,
 12                     LEVEL
 13                FROM nstr
 14               START WITH nstr.parent_str_id IS NULL
 15*            CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id
SQL> /
ERROR:
ORA-30004: when using SYS_CONNECT_BY_PATH function, cannot have separator as
part of column value

SQL> ed
Wrote file afiedt.buf

  1  WITH nstr AS(
  2  SELECT 940 AS STR_ID, 'ааа. ааяаа'              AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
  3  SELECT 950 AS STR_ID, 'аааааааа ааяаав, ваага'  AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION ALL
  4  SELECT 972 AS STR_ID, '- аааактааа'             AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION ALL
  5  SELECT 973 AS STR_ID, '- аааактааа'             AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION ALL
  6  SELECT 980 AS STR_ID, 'ааа'                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
  7  SELECT 981 AS STR_ID, 'Оааа ааа г/к пааката'    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL UNION ALL
  8  SELECT 982 AS STR_ID, 'Оааа ааа г/к пааката '   AS STR_NAME, 981                  AS PARENT_STR_ID FROM DUAL
  9  )
 10              SELECT SYS_CONNECT_BY_PATH(nstr.str_name, ' = ') PATH,
 11                     nstr.str_id,
 12                     LEVEL
 13                FROM nstr
 14               START WITH nstr.parent_str_id IS NULL
 15*            CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id
SQL> /
ERROR:
ORA-30004: when using SYS_CONNECT_BY_PATH function, cannot have separator as
part of column value



no rows selected



.....
stax
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #40096496
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,
Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  WITH nstr AS(
  2  SELECT 940 AS STR_ID, 'ааа. ааяаа'              AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
  3  SELECT 950 AS STR_ID, 'аааааааа ааяаав, ваага'  AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION ALL
  4  SELECT 972 AS STR_ID, '- аааактааа'             AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION ALL
  5  SELECT 973 AS STR_ID, '- аааактааа'             AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION ALL
  6  SELECT 980 AS STR_ID, 'xxx'                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
  7  SELECT 981 AS STR_ID, 'Оааа ааа 333 пааката'    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL UNION ALL
  8  SELECT 982 AS STR_ID, 'Оааа ааа 444 пааката '   AS STR_NAME, 981                  AS PARENT_STR_ID FROM DUAL
  9  )
 10              SELECT SYS_CONNECT_BY_PATH(nstr.str_name, ' / ') PATH,
 11                     nstr.str_id,
 12                     LEVEL
 13                FROM nstr
 14               START WITH nstr.parent_str_id IS NULL
 15*            CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id
SQL> /
ERROR:
ORA-30004: when using SYS_CONNECT_BY_PATH function, cannot have separator as
part of column value



no rows selected
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #40096509
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну пунктуация жеж.
Это либо бага, не воспроизводимая на доступных мне серверах, либо особенности локали, которую отказываетесь показывать :)
Код: 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.
Connected to Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 

WITH nstr AS(
SELECT 940 AS STR_ID, 'ааа. ааяаа'              AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 950 AS STR_ID, 'аааааааа ааяаав, ваага'  AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 972 AS STR_ID, '- аааактааа'             AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 973 AS STR_ID, '- аааактааа'             AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 980 AS STR_ID, 'ааа'                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 981 AS STR_ID, 'Оааа ааа г/к пааката'    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 982 AS STR_ID, 'Оааа ааа г/к пааката '   AS STR_NAME, 981                  AS PARENT_STR_ID FROM DUAL
)
            SELECT SYS_CONNECT_BY_PATH(nstr.str_name, ' / ') PATH,
                   nstr.str_id,
                   LEVEL
              FROM nstr
             START WITH nstr.parent_str_id IS NULL
           CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id
;

PATH                                                                                 STR_ID      LEVEL
-------------------------------------------------------------------------------- ---------- ----------
 / ааа. ааяаа                                                                           940          1
 / ааа. ааяаа / аааааааа ааяаав, ваага                                                  950          2
 / ааа. ааяаа / аааааааа ааяаав, ваага / - аааактааа                                    972          3
 / ааа. ааяаа / аааааааа ааяаав, ваага / - аааактааа / - аааактааа                      973          4
 / ааа                                                                                  980          1
 / ааа / Оааа ааа г/к пааката                                                           981          2
 / ааа / Оааа ааа г/к пааката / Оааа ааа г/к пааката                                    982          3

7 rows selected

WITH nstr AS(
SELECT 940 AS STR_ID, 'ааа. ааяаа'              AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 950 AS STR_ID, 'аааааааа ааяаав, ваага'  AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 972 AS STR_ID, '- аааактааа'             AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 973 AS STR_ID, '- аааактааа'             AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 980 AS STR_ID, 'ааа'                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 981 AS STR_ID, 'Оааа ааа г/к пааката'    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 982 AS STR_ID, 'Оааа ааа г/к пааката '   AS STR_NAME, 981                  AS PARENT_STR_ID FROM DUAL
)
            SELECT SYS_CONNECT_BY_PATH(nstr.str_name, ' \ ') PATH,
                   nstr.str_id,
                   LEVEL
              FROM nstr
             START WITH nstr.parent_str_id IS NULL
           CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id
;

PATH                                                                                 STR_ID      LEVEL
-------------------------------------------------------------------------------- ---------- ----------
 \ ааа. ааяаа                                                                           940          1
 \ ааа. ааяаа \ аааааааа ааяаав, ваага                                                  950          2
 \ ааа. ааяаа \ аааааааа ааяаав, ваага \ - аааактааа                                    972          3
 \ ааа. ааяаа \ аааааааа ааяаав, ваага \ - аааактааа \ - аааактааа                      973          4
 \ ааа                                                                                  980          1
 \ ааа \ Оааа ааа г/к пааката                                                           981          2
 \ ааа \ Оааа ааа г/к пааката \ Оааа ааа г/к пааката                                    982          3

7 rows selected

WITH nstr AS(
SELECT 940 AS STR_ID, 'ааа. ааяаа'              AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 950 AS STR_ID, 'аааааааа ааяаав, ваага'  AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 972 AS STR_ID, '- аааактааа'             AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 973 AS STR_ID, '- аааактааа'             AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 980 AS STR_ID, 'ааа'                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 981 AS STR_ID, 'Оааа ааа г/к пааката'    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 982 AS STR_ID, 'Оааа ааа г/к пааката '   AS STR_NAME, 981                  AS PARENT_STR_ID FROM DUAL
)
            SELECT SYS_CONNECT_BY_PATH(nstr.str_name, ' = ') PATH,
                   nstr.str_id,
                   LEVEL
              FROM nstr
             START WITH nstr.parent_str_id IS NULL
           CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id
;

PATH                                                                                 STR_ID      LEVEL
-------------------------------------------------------------------------------- ---------- ----------
 = ааа. ааяаа                                                                           940          1
 = ааа. ааяаа = аааааааа ааяаав, ваага                                                  950          2
 = ааа. ааяаа = аааааааа ааяаав, ваага = - аааактааа                                    972          3
 = ааа. ааяаа = аааааааа ааяаав, ваага = - аааактааа = - аааактааа                      973          4
 = ааа                                                                                  980          1
 = ааа = Оааа ааа г/к пааката                                                           981          2
 = ааа = Оааа ааа г/к пааката = Оааа ааа г/к пааката                                    982          3

7 rows selected

WITH nstr AS(
SELECT 940 AS STR_ID, 'ааа. ааяаа'              AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 950 AS STR_ID, 'аааааааа ааяаав, ваага'  AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 972 AS STR_ID, '- аааактааа'             AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 973 AS STR_ID, '- аааактааа'             AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 980 AS STR_ID, 'xxx'                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 981 AS STR_ID, 'Оааа ааа 333 пааката'    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL UNION ALL
SELECT 982 AS STR_ID, 'Оааа ааа 444 пааката '   AS STR_NAME, 981                  AS PARENT_STR_ID FROM DUAL
)
            SELECT SYS_CONNECT_BY_PATH(nstr.str_name, ' / ') PATH,
                   nstr.str_id,
                   LEVEL
              FROM nstr
             START WITH nstr.parent_str_id IS NULL
           CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id
;

PATH                                                                                 STR_ID      LEVEL
-------------------------------------------------------------------------------- ---------- ----------
 / ааа. ааяаа                                                                           940          1
 / ааа. ааяаа / аааааааа ааяаав, ваага                                                  950          2
 / ааа. ааяаа / аааааааа ааяаав, ваага / - аааактааа                                    972          3
 / ааа. ааяаа / аааааааа ааяаав, ваага / - аааактааа / - аааактааа                      973          4
 / xxx                                                                                  980          1
 / xxx / Оааа ааа 333 пааката                                                           981          2
 / xxx / Оааа ааа 333 пааката / Оааа ааа 444 пааката                                    982          3

7 rows selected


SQL> 

...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #40096510
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Я не дома
Вечером нлс сброшу
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #40096525
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous

которую отказываетесь показывать :)

не умею

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  WITH nstr AS(
  2  SELECT 940 AS STR_ID, rpad('1',1)              AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  3  SELECT 950 AS STR_ID, rpad('2',22)              AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION
  4  SELECT 972 AS STR_ID, rpad('3',11)              AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION
  5  SELECT 973 AS STR_ID, rpad('4',11)            AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION
  6  SELECT 980 AS STR_ID, rpad('5',3)                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  7  --SELECT 980 AS STR_ID, rpad('6',20)                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  8  SELECT 981 AS STR_ID, '1234 123 333 1234567'    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL UNION
  9  --SELECT 980 AS STR_ID, rpad('6',21)                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL
 10  SELECT 981 AS STR_ID, '1234 123 333 12345678'    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL
 11  )
 12              SELECT SYS_CONNECT_BY_PATH(nstr.str_name, ' / ') PATH,
 13                     nstr.str_id,
 14                     LEVEL
 15                FROM nstr
 16               START WITH nstr.parent_str_id IS NULL
 17*            CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id
SQL> /

PATH                                                        STR_ID      LEVEL
------------------------------------------------------- ---------- ----------
 / 1                                                           940          1
 / 1 / 2                                                       950          2
 / 1 / 2                      / 3                              972          3
 / 1 / 2                      / 3           / 4                973          4


 / 5                                                           980          1
 / 5   / 1234 123 333 1234567                                  981          2
 / 5   / 1234 123 333 12345678                                 981          2

7 rows selected.

SQL> ed
Wrote file afiedt.buf

  1  WITH nstr AS(
  2  SELECT 940 AS STR_ID, rpad('1',1)              AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  3  SELECT 950 AS STR_ID, rpad('2',22)              AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION
  4  SELECT 972 AS STR_ID, rpad('3',11)              AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION
  5  SELECT 973 AS STR_ID, rpad('4',11)            AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION
  6  SELECT 980 AS STR_ID, rpad('5',3)                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  7  --SELECT 980 AS STR_ID, rpad('6',20)                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  8  SELECT 981 AS STR_ID, '1234 123 333 1234567'    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL UNION
  9  --SELECT 980 AS STR_ID, rpad('6',21)                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL
 10  SELECT 981 AS STR_ID, '1234 123 333 1234567 '    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL
 11  )
 12              SELECT SYS_CONNECT_BY_PATH(nstr.str_name, ' / ') PATH,
 13                     nstr.str_id,
 14                     LEVEL
 15                FROM nstr
 16               START WITH nstr.parent_str_id IS NULL
 17*            CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id
SQL> /
ERROR:
ORA-30004: when using SYS_CONNECT_BY_PATH function, cannot have separator as part of column value



no rows selected

SQL>
SQL> ed
Wrote file afiedt.buf

  1  WITH nstr AS(
  2  SELECT 940 AS STR_ID, rpad('1',1)              AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  3  SELECT 950 AS STR_ID, rpad('2',22)              AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION
  4  SELECT 972 AS STR_ID, rpad('3',11)              AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION
  5  SELECT 973 AS STR_ID, rpad('4',11)            AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION
  6  SELECT 980 AS STR_ID, rpad('5',3)                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  7  --SELECT 980 AS STR_ID, rpad('6',20)                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  8  SELECT 981 AS STR_ID, '1234 123 333 1234567'    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL UNION
  9  --SELECT 980 AS STR_ID, rpad('6',21)                     AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL
 10  SELECT 981 AS STR_ID, '1234 123 333 1234567 '    AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL
 11  )
 12              SELECT SYS_CONNECT_BY_PATH(nstr.str_name, ' f ') PATH,
 13                     nstr.str_id,
 14                     LEVEL
 15                FROM nstr
 16               START WITH nstr.parent_str_id IS NULL
 17*            CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id
SQL> /
ERROR:
ORA-30004: when using SYS_CONNECT_BY_PATH function, cannot have separator as part of column value



no rows selected



.....
stax
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #40096603
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
SELECT * FROM 
NLS_SESSION_PARAMETERS;


PARAMETER                      VALUE                                   
------------------------------ ----------------------------------------
NLS_LANGUAGE                   RUSSIAN                                 
NLS_TERRITORY                  CIS                                     
NLS_CURRENCY                   р.                                      
NLS_ISO_CURRENCY               CIS                                     
NLS_NUMERIC_CHARACTERS         ,                                       
NLS_CALENDAR                   GREGORIAN                               
NLS_DATE_FORMAT                DD.MM.RR                                
NLS_DATE_LANGUAGE              RUSSIAN                                 
NLS_SORT                       RUSSIAN                                 
NLS_TIME_FORMAT                HH24:MI:SSXFF                           
NLS_TIMESTAMP_FORMAT           DD.MM.RR HH24:MI:SSXFF                  
NLS_TIME_TZ_FORMAT             HH24:MI:SSXFF TZR                       
NLS_TIMESTAMP_TZ_FORMAT        DD.MM.RR HH24:MI:SSXFF TZR              
NLS_DUAL_CURRENCY              р.                                      
NLS_COMP                       BINARY                                  
NLS_LENGTH_SEMANTICS           BYTE                                    
NLS_NCHAR_CONV_EXCP            FALSE    


------------------------------
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE	11.2.0.4.0	Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #40096610
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
Код: plaintext
NLS_SESSION_PARAMETERS;
database
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #40096613
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous

То есть понятно, что ломается оно на строке 'Оааа ааа г/к пааката', но почему игнорит пробелы в разделителе - осталось неясным.


Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  WITH nstr AS(
  2    SELECT 940 AS STR_ID, '11'            AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  3    SELECT 950 AS STR_ID, '22'            AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION
  4    SELECT 972 AS STR_ID, '33'            AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION
  5    SELECT 973 AS STR_ID, '44'            AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION
  6    SELECT 980 AS STR_ID, '55'            AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  7    SELECT 980 AS STR_ID, '66'            AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  8    SELECT 980 AS STR_ID, '77'||'F'       AS STR_NAME, CAST(null AS NUMBER) AS PARENT_STR_ID FROM DUAL
  9  --  SELECT 981 AS STR_ID, '1234 123F333_1234567F'   AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL
 10    )
 11                SELECT SYS_CONNECT_BY_PATH(nstr.str_name, 'F')||'<' PATH,
 12                       nstr.str_id,
 13                       LEVEL
 14                  FROM nstr
 15                 START WITH nstr.parent_str_id IS NULL
 16*            CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id
SQL> /
ERROR:
ORA-30004: when using SYS_CONNECT_BY_PATH function, cannot have separator as
part of column value



no rows selected

SQL> ed
Wrote file afiedt.buf

  1  WITH nstr AS(
  2    SELECT 940 AS STR_ID, '11'            AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  3    SELECT 950 AS STR_ID, '22'            AS STR_NAME, 940                  AS PARENT_STR_ID FROM DUAL UNION
  4    SELECT 972 AS STR_ID, '33'            AS STR_NAME, 950                  AS PARENT_STR_ID FROM DUAL UNION
  5    SELECT 973 AS STR_ID, '44'            AS STR_NAME, 972                  AS PARENT_STR_ID FROM DUAL UNION
  6    SELECT 980 AS STR_ID, '55'            AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  7    SELECT 980 AS STR_ID, '66'            AS STR_NAME, CAST(NULL AS NUMBER) AS PARENT_STR_ID FROM DUAL UNION
  8    SELECT 980 AS STR_ID, '77'||'F'       AS STR_NAME, CAST(0 AS NUMBER) AS PARENT_STR_ID FROM DUAL
  9  --  SELECT 981 AS STR_ID, '1234 123F333_1234567F'   AS STR_NAME, 980                  AS PARENT_STR_ID FROM DUAL
 10    )
 11                SELECT SYS_CONNECT_BY_PATH(nstr.str_name, 'F')||'<' PATH,
 12                       nstr.str_id,
 13                       LEVEL
 14                  FROM nstr
 15                 START WITH nstr.parent_str_id IS NULL
 16*            CONNECT BY PRIOR nstr.str_id   = nstr.parent_str_id
SQL> /

PATH                                         STR_ID      LEVEL
---------------------------------------- ---------- ----------
F11<                                            940          1
F11F22<                                         950          2
F11F22F33<                                      972          3
F11F22F33F44<                                   973          4
F55<                                            980          1
F66<                                            980          1

6 rows selected.

SQL>



......
stax
...
Рейтинг: 0 / 0
странный глюк ORA-30004: при использовании функции SYS_CONNECT_BY_PATH невозможно получить
    #40096615
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

не то запостил
щас исправлю

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


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