Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 переход на 11.2.0.3 ОРА-1790 или Баг.  [new]
BigNik
Member

Откуда: Красноярск\Москва
Сообщений: 226
Прошу помочь в ситуации,планируем переехать на 11.2.0.3 и притестирование приложений заметили следующий баг.
искал на металинке и инете но не нашел ничего стоящего
Имеем таблицы (создал тестовые для упрощения)

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


create table SP_TOV_test
(
  nomk_ls     NUMBER(13) not null,
  c_trn       VARCHAR2(13)
);
                 
insert into SP_TOV_test values(0,100);
insert into SP_TOV_test values(0,100);
insert into SP_TOV_test values(0,100);
                 
create table L_RECEPT_test
(
 id   number ,
 c_ls     NUMBER(15)
 
);

insert into L_RECEPT_test values(1,100);
insert into L_RECEPT_test values(2,100);
insert into L_RECEPT_test values(1,100);
insert into L_RECEPT_test values(1,100);


и выполним запрос

select a.rowid ri,a.* from L_RECEPT_test a
               where a.id=1
                 AND  a.C_LS IS NOT NULL AND NOT EXISTS 
                 (SELECT 1 FROM SP_TOV_test  
                 WHERE  (C_TRN = a.C_LS  ) or (nomk_ls = a.C_LS )
                 )


получаем ошибку ora-1790

меняем местами условие a.C_LS = nomk_ls
select a.rowid ri,a.* from L_RECEPT_test a
               where a.id=1
                 AND  a.C_LS IS NOT NULL AND NOT EXISTS 
                 (SELECT 1 FROM SP_TOV_test  
                 WHERE  (C_TRN = a.C_LS  ) or (a.C_LS = nomk_ls  )
                 )


обрабатывает нормально

ставим and вместо or


select a.rowid ri,a.* from L_RECEPT_test a
               where a.id=1
                 AND  a.C_LS IS NOT NULL AND NOT EXISTS 
                 (SELECT 1 FROM SP_TOV_test  
                 WHERE  (C_TRN = a.C_LS  ) and (nomk_ls = a.C_LS )
                 )


тоже все нормально
комментируем любое из условий и запрос успешен.


Обращаю внимание такое только в 11.2.0.3 в 11.2.0.2 и 10.2.0.4 все вариации обрабатываются без ошибок
версия оракла 11.2.0.3 в раке из двух узлов
версия оракла 10.2.0.4 в раке из двух узлов тоже


и извечный вопрос что делать то?
6 июн 12, 13:17    [12674023]     Ответить | Цитировать Сообщить модератору
 Re: переход на 11.2.0.3 ОРА-1790 или Баг.  [new]
---*---
Guest
BigNik,

>Что делать то?

А что надо-то?
(C_TRN = a.C_LS or nomk_ls = a.C_LS ) или a.C_LS in (C_TRN,nomk_ls) - норм?
6 июн 12, 13:33    [12674172]     Ответить | Цитировать Сообщить модератору
 Re: переход на 11.2.0.3 ОРА-1790 или Баг.  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15235
BigNik
..

и извечный вопрос что делать то?

продолжать искать затычку (у вендора). если не найдёте - SR создавайте.
ну а чтобы не ждать - переписывайте тот OR - например, через decode / case / регулярное выражение / .. и т.п. , да на крайняк - и через union

вообще, частенько оптимизатор с тем OR косячит. затыкают, затыкают - всё заткнуть не могут.
так что работа по уходу от него = повышение стойкости кода к последующим (в том числе еще и не изготовленным ) глюкам
6 июн 12, 13:37    [12674203]     Ответить | Цитировать Сообщить модератору
 Re: переход на 11.2.0.3 ОРА-1790 или Баг.  [new]
Timur Akhmadeev
Member

Откуда:
Сообщений: 488
BigNik
и извечный вопрос что делать то?

Использовать явное приведение типов.
Беда каая-то с транформацией запроса.
6 июн 12, 13:41    [12674240]     Ответить | Цитировать Сообщить модератору
 Re: переход на 11.2.0.3 ОРА-1790 или Баг.  [new]
kinky cat
Member

Откуда: с дивана23
Сообщений: 1150
BigNik,
для начало надо запрос нормально написать - где используются алиасы, где нет
за такую писанину надо по рукам бить
6 июн 12, 13:42    [12674259]     Ответить | Цитировать Сообщить модератору
 Re: переход на 11.2.0.3 ОРА-1790 или Баг.  [new]
BigNik
Member

Откуда: Красноярск\Москва
Сообщений: 226
---*---
BigNik,

>Что делать то?

А что надо-то?
(C_TRN = a.C_LS or nomk_ls = a.C_LS ) или a.C_LS in (C_TRN,nomk_ls) - норм?


оба запроса с этой же ошибкой
ошибка на обоих узлах.

select a.rowid ri,a.* from L_RECEPT_test a
               where a.id=1
                 AND  a.C_LS IS NOT NULL AND NOT EXISTS 
                 (SELECT 1 FROM SP_TOV_test  
                 WHERE  (C_TRN = a.C_LS  or nomk_ls = a.C_LS )
                 )                 
                 
                 
select a.rowid ri,a.* from L_RECEPT_test a
               where a.id=1
                 AND  a.C_LS IS NOT NULL AND NOT EXISTS 
                 (SELECT 1 FROM SP_TOV_test  
                 WHERE  a.C_LS in (C_TRN,nomk_ls) 
                 )   





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

обращаюсь к тем у кого версия 11.2.0.3 . происходит ли ошибка при моих вводных?
6 июн 12, 14:04    [12674462]     Ответить | Цитировать Сообщить модератору
 Re: переход на 11.2.0.3 ОРА-1790 или Баг.  [new]
---*---
Guest
BigNik,

Да, проверил на 11.0.3.0, та же фигня.
С to_number(C_TRN) работает
6 июн 12, 14:18    [12674629]     Ответить | Цитировать Сообщить модератору
 Re: переход на 11.2.0.3 ОРА-1790 или Баг.  [new]
BigNik
Member

Откуда: Красноярск\Москва
Сообщений: 226
---*---
BigNik,

Да, проверил на 11.0.3.0, та же фигня.
С to_number(C_TRN) работает


спасибо, будем думать, сейчас интересует стоит ли ставить PSU 11.2.0.3.2 решит ли проблему? по списку под правленых багов вроде невидно, может у кого нибудь стоит данный PSU и сможет проверить запрос
7 июн 12, 05:00    [12679041]     Ответить | Цитировать Сообщить модератору
 Re: переход на 11.2.0.3 ОРА-1790 или Баг.  [new]
Timur Akhmadeev
Member

Откуда:
Сообщений: 488
тынц
BigNik
сейчас интересует стоит ли ставить PSU 11.2.0.3.2 решит ли проблему?

Не решит.
7 июн 12, 13:42    [12681750]     Ответить | Цитировать Сообщить модератору
 Re: переход на 11.2.0.3 ОРА-1790 или Баг.  [new]
BigNik
Member

Откуда: Красноярск\Москва
Сообщений: 226
Timur Akhmadeev,

спасибо
8 июн 12, 06:23    [12684947]     Ответить | Цитировать Сообщить модератору
 Re: переход на 11.2.0.3 ОРА-1790 или Баг.  [new]
BigNik
Member

Откуда: Красноярск\Москва
Сообщений: 226
если столкнулись с такой ошибкой и лень переписывать запрос, меняя порядок или явно преобразовывая, есть простое решение, а именно добавить хинт
/*+ NO_QUERY_TRANSFORMATION*/

select  /*+ NO_QUERY_TRANSFORMATION*/ a.rowid ri,a.* from L_RECEPT_test1 a
               where a.id=1
                 AND  a.C_LS IS NOT NULL AND NOT EXISTS 
                 (SELECT 1 FROM SP_TOV_test1  
                 WHERE  (C_TRN = a.C_LS  ) or (nomk_ls =a.C_LS)
                 )



может пригодится кому нибудь
31 июл 12, 13:06    [12940077]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить