Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 ошибка функции SYS_CONNECT_BY_PATH  [new]
boles
Member

Откуда:
Сообщений: 34
Добрый день!

При запуске следующего запроса:

select * from
test_table X
where
exists
(
with y as
      (
      select distinct KE_ID_1, S_CODE_1, SORT_ORDER_1, DATE_SORT_1, PAR_ID_1
           from
      itsm_table
      ),
      z as
      (
      select KE_ID_1, S_CODE_1, SORT_ORDER_1, DATE_SORT_1, PAR_ID_1, sys_connect_by_path(to_char(KE_ID_1), '/') as "ALL_ID"
          from y
      start with PAR_ID_1 = 0
      connect by prior KE_ID_1 = PAR_ID_1
      )
select * from Z
where Z.S_CODE_1 like 'ППО%' and (instr(Z.ALL_ID, to_char(X.cit_oid)) > 0) and
      (Z.DATE_SORT_1 <= '2007.02.02') and
      (Z.DATE_SORT_1 >= '2007.02.02')
)


вылазит ошибка ORA-30004: when using SYS_CONNECT_BY_PATH function, cannot have seperator as part of column value

Смысл понятен, однако в колонке нет слэшэй, да и если в условии заменить X.cit_oid на конкретное значение, то отрабатывает отлично.

Подскажите, что сделать для сравнения значения из таблицы X cо значением функции SYS_CONNECT_BY_PATH?

Заранее спасибо!
19 мар 07, 10:13    [3913292]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
План киньте(только с тегом SRC!).
А в качестве первого предположения - поставьте NO_MERGE в "деревянный" подзапрос.
19 мар 07, 10:23    [3913339]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
boles
Member

Откуда:
Сообщений: 34
Jannny
План киньте(только с тегом SRC!).
А в качестве первого предположения - поставьте NO_MERGE в "деревянный" подзапрос.


везде попробовал NO_MERGE - не помогает...

что значит план с тегом SRC???
19 мар 07, 10:39    [3913450]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
boles
везде попробовал NO_MERGE - не помогает...
Можно продемонстировать - как именно? На всякий случай :)

boles
что значит план с тегом SRC???
Это значит в отформатированном виде. Кнопочка такая SRC видите? Поиграйтесь в предварительном просмотре :)
19 мар 07, 11:07    [3913654]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
boles
Member

Откуда:
Сообщений: 34
Вот план с кнопочкой SRC :)

SELECT STATEMENT, GOAL = CHOOSE			Cost=1167	Cardinality=379	Bytes=96645
 FILTER					
  TABLE ACCESS FULL	Object owner=SDESK	Object name=ITSM_CONFIGURATION_ITEMS	Cost=30	Cardinality=379	Bytes=96645
   RECURSIVE EXECUTION		Object name=SYS_LE_4_0			
  TEMP TABLE TRANSFORMATION					
   VIEW	Object owner=SDESK		Cost=3	Cardinality=661	Bytes=1378846
    FILTER					
     CONNECT BY WITH FILTERING					
      FILTER					
       COUNT					
        VIEW	Object owner=SDESK		Cost=3	Cardinality=661	Bytes=74693
         TABLE ACCESS FULL	Object owner=SYS	Object name=SYS_TEMP_0FD9D6625_FF36	Cost=3	Cardinality=661	Bytes=36355
      HASH JOIN					
       CONNECT BY PUMP					
       COUNT					
        VIEW	Object owner=SDESK		Cost=3	Cardinality=661	Bytes=74693
         TABLE ACCESS FULL	Object owner=SYS	Object name=SYS_TEMP_0FD9D6625_FF36	Cost=3	Cardinality=661	Bytes=36355
      COUNT					
       VIEW	Object owner=SDESK		Cost=3	Cardinality=661	Bytes=74693
        TABLE ACCESS FULL	Object owner=SYS	Object name=SYS_TEMP_0FD9D6625_FF36	Cost=3	Cardinality=661	Bytes=36355

А вот куды вставлял NO_MERGE:
select /*+NO_MERGE*/ * from
test_table X
where
exists
(
with y as 
    (
    select /*+NO_MERGE*/ distinct KE_ID_1, S_CODE_1, SORT_ORDER_1, DATE_SORT_1, PAR_ID_1
      from 
         itsm_table
    ),
  z as
    (
    select /*+NO_MERGE*/ KE_ID_1, S_CODE_1, SORT_ORDER_1, DATE_SORT_1, PAR_ID_1, sys_connect_by_path(to_char(KE_ID_1), '/') as "ALL_ID" from y
    start with PAR_ID_1 = 0
    connect by prior KE_ID_1 = PAR_ID_1
    )
select /*+NO_MERGE*/ * from Z
where Z.S_CODE_1 like 'ППО%' and (instr(Z.ALL_ID, to_char(X.cit_oid)) > 0) and
          (Z.DATE_SORT_1 <= '2007.02.02') and
          (Z.DATE_SORT_1 >= '2007.02.02')
)


В разных вариациях, естественно :)
19 мар 07, 11:57    [3914005]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
boles
А вот куды вставлял NO_MERGE:
Вот-вот именно поэтому и переспрашиваю :( Тынц
Видите разницу? И во все подряд места не надо :)
19 мар 07, 12:14    [3914122]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
boles
Member

Откуда:
Сообщений: 34
Jannny
И во все подряд места не надо :)


А в какое место надо?
19 мар 07, 12:15    [3914136]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
boles
Member

Откуда:
Сообщений: 34
Собственно, даже с указанием имени таблицы NO_MERGE ни в одном месте не помог, к сожалению...

Чего еще подскажете сделать?
19 мар 07, 12:21    [3914173]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
boles
..везде попробовал NO_MERGE - не помогает...

Ну, with ( --+ materialize дрова)
19 мар 07, 12:22    [3914175]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
boles
Member

Откуда:
Сообщений: 34
orawish
Ну, with ( --+ materialize дрова)


Как это понимать? Можно подоступнее объяснить?
19 мар 07, 12:24    [3914195]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
boles
orawish
Ну, with ( --+ materialize дрова)


Как это понимать? Можно подоступнее объяснить?


select * from
test_table X
where
exists
(
with y as 
      (
      select distinct KE_ID_1, S_CODE_1, SORT_ORDER_1, DATE_SORT_1, PAR_ID_1
           from 
      itsm_table
      ),
      z as
      (
      select --+ materialize
KE_ID_1, S_CODE_1, SORT_ORDER_1, DATE_SORT_1, PAR_ID_1, sys_connect_by_path(to_char(KE_ID_1), '/') as "ALL_ID" 
          from y
      start with PAR_ID_1 = 0
      connect by prior KE_ID_1 = PAR_ID_1
      )
select * from Z
where Z.S_CODE_1 like 'ППО%' and (instr(Z.ALL_ID, to_char(X.cit_oid)) > 0) and
      (Z.DATE_SORT_1 <= '2007.02.02') and
      (Z.DATE_SORT_1 >= '2007.02.02')
)
19 мар 07, 12:38    [3914284]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
boles
Ну, with ( --+ materialize дрова)

Как это понимать? Можно подоступнее объяснить?[/quot]
А, возможно и
with y as 
      (
      select --+ то же
или оба
19 мар 07, 12:42    [3914310]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
boles
Member

Откуда:
Сообщений: 34
orawish, спасибо большое, после первого же --+materialize все корректно отработало!

Тока вот вопрос, что этот "--+materialize" обозначает? В документации нигде не нашел, а на будущее хотелось бы знать!
19 мар 07, 12:48    [3914350]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
boles
orawish, спасибо большое, после первого же --+materialize все корректно отработало!

Тока вот вопрос, что этот "--+materialize" обозначает? В документации нигде не нашел, а на будущее хотелось бы знать!

план посмотрите - увидите, что этот запрос трансформируется в темп. (как живую;) таблицу
19 мар 07, 12:51    [3914367]     Ответить | Цитировать Сообщить модератору
 Re: ошибка функции SYS_CONNECT_BY_PATH  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
boles
Тока вот вопрос, что этот "--+materialize" обозначает? В документации нигде не нашел, а на будущее хотелось бы знать!
Недокументированный этот хинт, вот ты его и не нашёл :)
20 мар 07, 05:57    [3917250]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить