Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2013.08.25;
Скачать: [xml.tar.bz2];

Вниз

Oracle 9i, получаю разные результаты update, не пойму, где косяк   Найти похожие ветки 

 
Паша   (2010-12-11 02:29) [0]

table2 t2, table3 t3 - таблицы с уникальными id
table4 t4 - подзапрос, возвращающий единственную запись для table3 t3

t1.t2_id - уникальный в таблице t1, t1.t3_id - не уникальный (рояли не играет, данные просто для красоты)

--этот запрос - кривой
update table1  t1
set field1 =
(select
t2.field2
from table2 t2, table3 t3, table4 t4
where t2.id = t1.t2_id
   and t3.id = t1.t3_id
   and t4.id = t1.t3_id
)

--этот отрабатывает нормально
update table1  t1
set field1 =
(select
t2.field2
from table2 t2, table3 t3, table4 t4
where t2.id = t1.t2_id
   and t3.id = t1.t3_id
   and t4.id = t3.id
)

наблюдение показало, что роль играет связка t3.id = t1.t3_id  and t4.id = t1.t3_id - эта вот связка глючит, и, я так понимаю, глючит соединение с t4.id.

почему, не пойму.


 
Игорь Шевченко ©   (2010-12-11 12:41) [1]

планы в студию


 
Petr V. Abramov ©   (2010-12-11 17:23) [2]


> --этот запрос - кривой
> update table1  t1
> set field1 =
> (select
> t2.field2
> from table2 t2, table3 t3, table4 t4
> where t2.id = t1.t2_id
>    and t3.id = t1.t3_id
>    and t4.id = t1.t3_id
> )
>
> --этот отрабатывает нормально
> update table1  t1
> set field1 =
> (select
> t2.field2
> from table2 t2, table3 t3, table4 t4
> where t2.id = t1.t2_id
>    and t3.id = t1.t3_id
>    and t4.id = t3.id
> )


> t1.t3_id - не уникальный (рояли не играет, данные просто
> для красоты)

как раз-таки играет, в первом случае запрос вернет столько записей, сколько t3_id в t1(т.е. сколько угодно от нуля до бесконечности), во втором - не больше одной (при условии, что остальные связки возвращают по одной, конечно)


 
Паша   (2010-12-11 18:31) [3]


> Игорь Шевченко ©   (11.12.10 12:41) [1]

планы, увы... одинаковы. да не в планах дело. но я попробую, не сей час, и с работы не могу


> Petr V. Abramov ©   (11.12.10 17:23) [2]

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

вопрос в том, что все таблицы связаны по id и там должно быть однозначно все находится. брэд, однако.


 
Кщд   (2010-12-12 08:51) [4]

>Паша   (11.12.10 02:29)  
что значит "кривой"? в подробностях.
про одинаковые планы верится с трудом - в студию уже попросили.
желательно вместе с desc t1, desc t2, desc t3, desc t4 и ключами.
в общем случае, это разные запросы и ничего удивительного в том, что они возвращают разный результат, нет.

PS для оформления кода лучше-таки пользоваться спец. тегами.


 
Паша   (2010-12-12 17:01) [5]


> Кщд   (12.12.10 08:51) [4]


увы, плана сейчас нет, и будет, ну разве шо во вторник%). а хочется прям счаз!

я тут подозреваю, что шо-то в логике глючит у оракла. или у меня.

но! таблица, на которой глючит (а именно table4) имеет уникальную связку как с ведущей table1, так и с table3, через которую (в случае правильной отработки запроса я ее и прицепил). т.е. логика запроса тут не страдает. а получается, по-факту - рвет этот запрос на куски, как Тузик грелку.

собственно, почему обнаружилось - сей запрос был выдран из цикла for ... loop для ускорения процесса обработки данных.

а, да! шо такое - кривой? так он работает криво. для наглядности, беру конкретную живую айдишку

update table1  t1
set field1
*****
where t1.id = 1
return field1

и в первом случае null, а во втором - то, что нужно. хэх, я народу на работе показывал - народ чешит рэпу...

зы. три строчки еще и тэгами - а оно нужно?


 
Кщд   (2010-12-12 19:20) [6]

>Паша   (12.12.10 17:01) [5]
1. desc t1, t2, t3, t4;
2. PK, UQ, FK ключи, not null constraint на поля, участвующие в запросе;
3. планы.
после этого можно начать разбираться в проблеме.

читать эту галиматью с самовыдуманной терминологией и "кривой" диагностикой проблемы не интересно

PS а коли Вам лень дернуть мышкой, чтобы Ваш код был читаем, а не как в "Паша   (11.12.10 02:29)", то лично мне в этом случае незачем и пытаться Вам помочь. "чешите репу" друг другу с коллегами и дальше.


 
Паша   (2010-12-12 19:54) [7]


> Кщд   (12.12.10 19:20) [6]


> то лично мне в этом случае незачем

а я лично Вас просил? и о чем, если не секрет? увы мне, увы... так что желаю Вам удачи!

зы. и, казалось бы, при чЁм тут PK, UQ, FK ключи, not null constraint на поля? слова, конечно мне знакомые, но как они могут в данном конкретном случае на что-то повлиять - не понимаю.


 
Petr V. Abramov ©   (2010-12-13 00:06) [8]


> Паша   (12.12.10 19:54) [7]
>
>

ты в студию давай, понимать потом будешь.
и вопрос сформулируй не "криво-не-криво", а "ожидалось то-то, вижу сё-то"


 
Ega23 ©   (2010-12-13 12:01) [9]

Безусловно, это глюк Оракла. А как же. Там 101 950 служащих (на 2010 год) насчитывается, как они могут нормальный продукт-то написать?
Вот Паша - другое дело.


 
Кщд   (2010-12-13 12:34) [10]

>Ega23 ©   (13.12.10 12:01) [9]
тем не менее, баг оптимизатора вероятен.
их в 8-ке было прилично, в 9-ке поменьше, но таки имелись.
вспомнить хотя бы забавное поведение при outer join синтаксисе(не (+)).
можно вспомнить индусский код в системных(dbms, а не третьесторонних utl) с: if var=null then...
но, увы, автор вместо подробностей предпочитает "чесать репу", что - вероятно - приятно всем "коллегам", но к сожалению мало способствует решению проблемы))


 
Ega23 ©   (2010-12-13 12:55) [11]


> тем не менее, баг оптимизатора вероятен.


Вероятен. Но - маловероятен. Гораздо более вероятно другое.


 
Кщд   (2010-12-13 12:59) [12]

>Ega23 ©   (13.12.10 12:55) [11]
подождем, когда(и если) автор обнажит детали


 
Petr V. Abramov ©   (2010-12-13 14:13) [13]


> Ega23 ©   (13.12.10 12:01) [9]
>
> Безусловно, это глюк Оракла. А как же. Там 101 950 служащих
> (на 2010 год) насчитывается

за этот глюк 1450 уволят


 
Паша   (2010-12-15 00:20) [14]


> Кщд   (13.12.10 12:34) [10]


> тем не менее, баг оптимизатора вероятен


ага... вот это уже ближе к телу. но планы обеих запросов выдают на удивление одинаковый результат. т.е. идентичны.

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

уже второй раз нарываюсь на такую неприятность в девятке, переписывая цикл в update методом копи-пасте. для ускорения работы. да, время порадовало, но результаты - отнюдь.


> Ega23 ©   (13.12.10 12:55) [11]


> Гораздо более вероятно другое.

да ты шо? вероятно? удивил! гыгы

Паша, ака Старый Маразматик

зы. тестовый сервак у нас под десяткой. и там было все красиво (хотя... теперь уже не совсем уверен). а код, перенесенный на девятку, дал дивный результат.


 
Кщд   (2010-12-15 05:02) [15]

>Паша   (15.12.10 00:20) [14]
>но планы обеих запросов выдают на удивление одинаковый результат
лог снятия плана из sqlplus, пожалуйста
и опять никаких данных по теме - слова, слова, слова
что ж, сваливайте всё на оптимизатор и продолжайте гадать на кофейной гуще


 
Паша   (2010-12-17 23:16) [16]


> лог снятия плана из sqlplus

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

однако, план обеих запросов - а его ж, таки, можно и без этого плюса сделать, та хоть и execute plan? показывает на удивление одинаковые результаты.

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

зы. на оптимизатор я как-то ничего не сваливал? это таки Ваше предположение? и я его всебоко принял к рассмотрению, однако - не в кассу...
а на кофейной-то - ну, не мой метод! мне всяко ближе метод научного тыка. гыгы


 
Паша   (2010-12-17 23:54) [17]

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

зы. анекдот:
поставили нам десятку. ну я не в курсе, шо там эти чудики натворили, но! есть таблица в три поля, два number, третье - varchar2. запрос типа select * ругается на невозможность преобразования в число, что естественно - там их и быть не может, с в третьем-то поле. т.е. можно было или нумберы выводить, или варчары, но по отдельности. во какие умельцы бывают! потом починили, но шо они сделали - сами не знают. абыдна, да?


> Кщд   (15.12.10 05:02) [15]

а насчет слов... года три-четыре назад тезка мой, Паша Голуб, от меня тут вопрос задал насчет математического округления (round криво работал в пятерке), и как его нормально в дельфях реализовать (у меня временно сюдой доступа не было). казалось бы, все просто? и шо тут было? начиная с того, как округляет интел, и кончая неописуемым количеством вариантов оного. буков на две страницы. и даже подрались. или нет? нет, ну не могли не подраццо, значит таки подрались. когда я сюда влез (уже порешав вопрос, там три строчки кода всего), улыбнуло.

так вот, щаз я выкладываю свой кривой код, да? разговор начнется о чем, догадался? в каком регистре я написал букву, и как криво названа таблица и скоко отступов положено по российскому (китайскому, нужное вставить) законодательству от левого края. а оно мне надо?



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2013.08.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.003 c
2-1355483106
AlexA
2012-12-14 15:05
2013.08.25
Глюк в динамическом массиве Delphi


2-1355671163
dummy_user
2012-12-16 19:19
2013.08.25
Странное поведение функции.


15-1364131639
TUser
2013-03-24 17:27
2013.08.25
Пенроуз в Политехническом музее


15-1364050360
О-Сознание
2013-03-23 18:52
2013.08.25
Web Money и уведомление на почту.


4-1266492114
Alik
2010-02-18 14:21
2013.08.25
Вызов стандратного окна даты времени





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский