powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Странное поведение при апдейте таблиц.
14 сообщений из 14, страница 1 из 1
Странное поведение при апдейте таблиц.
    #39877261
andrejjj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Подскажите пожалуйста, в какую сторону можно копать в моей ситуации.

У нас есть программа на джаве которая использует самописный ОРМ на основе EclipseLink. Который по большому счету просто пускалка запросов по переносу данных из одной базы в другую.

Возник какой-то плавающий баг.

Есть апдейты прописанные в одном файле такого вида

--апдейт 1
insert into TEMP_1
bla-bla-bla
;

commit;

--апдейт 2
insert into TEMP_1
bla-bla-bla -- но здесь в запросах ссылается на ТЕМР_1
;

commit;

Проблема в том, что периодически, в зависимости от фазы луны, второй апдейт не срабатывает. В логах програмы чисто, ошибок нет.
Может это быть фича Оракла, или ковырять этот гребаный фреймворк?
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877263
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejjj
Код: plsql
1.
2.
--апдейт
insert into

Прям как у Козьмы Пруткова.
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877266
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejjjв какую сторону можно копать в моей ситуации.Копать в сторону чтения доки.
Чтобы тебе помогли, выложи ddl твоих таблиц, скрипт и т.п. Тесткейс, короче. А то, может, у тебя temp_1 - это gtt c delete on commit
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877334
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejjj-- апдейт 1
insert into TEMP_1
bla-bla-bla
;

commit;

-- апдейт 2
insert into TEMP_1
bla-bla-bla -- но здесь в запросах ссылается на ТЕМР_1
;

commit;


Elic уже указывал на это. Ничего не смущает?
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877341
andrejjj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Временная таблица в которую добавляют данные описана так
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<table name="TEMP_LINK">
      </description>
      <column scale="0" precision="10" primaryKey="true" nullable="false" type="decimal"
        name="LINK_ID"/>
      <column length="1" primaryKey="false" nullable="true" type="char" name="SIDE">
        <description>R/L/B</description>
      </column>
    </table>



Скрипт, который пускается из джава кода такой:
Код: 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.
insert into TEMP_LINK(LINK_ID, SIDE)
select
  LINK_ID,
  DECODE(count(*),
  1,
  MIN(SIDE),'B') SIDE
from
  (
  select
    LINK_ID, 
    case when FIELD_1=FIELD_2 then 'L' else 'R' end SIDE
  from 
  	TABLE_1 c, 
  	TABLE_2 f, 
  	TABLE_3 li
  where
    TYPE in (500116,507116) and
    c.NEW_ID=f.NEW_ID and
    f.FACE_ID=li.FACE_ID and
    not exists
    ( 
    select 1 
    from TABLE_1 cc, TABLE_4 cl
    where
      cl.LINK_ID=li.LINK_ID and
      cc.NEW_ID=cl.NEW_ID and
      cc.TYPE in (908000, 908001, 908004,908005)
   )
   and exists
    ( 
    select 1 
    from 
    	TABLE_1 cc, 
    	TABLE_4 cl
    where
      cl.LINK_ID=li.LINK_ID and
      cc.NEW_ID=cl.NEW_ID and
      cc.TYPE in (907196, 907197, 909996)
   )
  group by 
  	LINK_ID, 
  	case when FIELD_1=FIELD_2 then 'L' else 'R' end)
group by LINK_ID; 

commit;

insert into TEMP_LINK(LINK_ID, SIDE)
  select a.LINK_ID, 'B'
  from
    (
  select cl.LINK_ID 
  from 
  	TABLE_1 c, 
  	TABLE_4 cl
  where
    c.NEW_ID=cl.NEW_ID and
    c.TYPE in (907196)
  minus
  (
  select cl.LINK_ID 
  from TABLE_1 c, TABLE_4 cl
  where
    c.NEW_ID=cl.NEW_ID and
    c.TYPE in (908000)
  union
  select
    LINK_ID
  from
    TEMP_LINK
  )) a,
  TABLE_5 b,
  TABLE_6 h
  where
    a.LINK_ID=b.LINK_ID
  and LEFT_ID=ID;

  commit;



Периодически, непонятно почему, второй инсерт в этом скрипте не срабатывает
P.S. Не пинайте за синтаксис, так исторически сложилось(с) еще до меня
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877343
andrejjj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
flexgen,
Эээээ, нет. Я не большой спец в Оракле. Код я выложил. Имена таблиц правда поменял.
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877348
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejjjЭээээ, нет.

Ты операцию insert от операции update не отличаешь.

Если выполнить только select из второго insert' a - каков будет результат? Что-то возвращается?
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877349
andrejjj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
flexgen,
Да, возвращаются идентичные наборы для эталонной базы и базы с ошибкой. Но в эталонной базе в таблицу TEMP_LINK данные из второго инсерта попадают. А в базе с ошибкой - нет.
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877352
andrejjj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал эмулировать второй инсерт таким запросом (в приложении). Для эталонной и ошибочной баз он выдает одинковый результат
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877403
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejjjЭээээ, нет. Я не большой спец в Оракле.Ты преувеличиваешь. Ты даун. И не то чтобы в Oracle, а вообще в БД. Тебе невозможно что-либо объяснить, даже если бы ты мог внятно сформулировать проблему, ибо не в коня корм.
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877425
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejjjПробовал эмулировать второй инсерт таким запросом (в приложении). Для эталонной и ошибочной баз он выдает одинковый результат


Сохрани результат первой команды select во временную таблицу. Посмотри результаты.
Код: 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.
select
      LINK_ID,
      DECODE(count(*),
      1,
      MIN(SIDE),'B') SIDE
    from
      (
      select
        LINK_ID, 
        case when INVERTED=IS_EXTERIOR then 'L' else 'R' end SIDE
      from 
        RDF_CARTO c, 
        RDF_CARTO_FACE f, 
        RDF_FACE_LINK li
      where
        FEATURE_TYPE in (500116,507116) and
        c.CARTO_ID=f.CARTO_ID and
        f.FACE_ID=li.FACE_ID and
        not exists
        ( 
        select 1 
        from 
          RDF_CARTO cc, 
          RDF_CARTO_LINK cl
        where
          cl.LINK_ID=li.LINK_ID and
          cc.CARTO_ID=cl.CARTO_ID and
          cc.FEATURE_TYPE in (908000, 908001, 908004,908005)
       )
       and exists
        ( 
        select 1 
        from 
          RDF_CARTO cc, 
          RDF_CARTO_LINK cl
        where
          cl.LINK_ID=li.LINK_ID and
          cc.CARTO_ID=cl.CARTO_ID and
          cc.FEATURE_TYPE in (907196, 907197, 909996)
       )
      group by LINK_ID, case when INVERTED=IS_EXTERIOR then 'L' else 'R' end)
    group by LINK_ID



Подставь вместо TEMP_OCEAN_LINK_2 имя временной таблицы и выполни вторую команду select, тоже сохрани в другую временную таблицу. Посмотри результаты.

Код: 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.
  select a.LINK_ID, 'B'
  from
    (
  select cl.LINK_ID 
  from RDF_CARTO c, RDF_CARTO_LINK cl
  where
    c.CARTO_ID=cl.CARTO_ID and
    c.FEATURE_TYPE in (907196)
  minus
  (
  select cl.LINK_ID 
  from RDF_CARTO c, RDF_CARTO_LINK cl
  where
    c.CARTO_ID=cl.CARTO_ID and
    c.FEATURE_TYPE in (908000)
  union
  select
    LINK_ID
  from
    TEMP_OCEAN_LINK_2
  )) a,
  RDF_LINK b,
  CF_LDM_ADMIN_HIERARCHY h
  where
    a.LINK_ID=b.LINK_ID
  and LEFT_ADMIN_PLACE_ID=ADMIN_PLACE_ID
  order by 1;



Попытайся понять в каком случае результат второго запроса может быть пустым. Если не нашел причину - выполни каждый подзапрос по отдельности чтобы увидеть что именно возвращается. По-другому - никак.
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877461
andrejjj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
elic, о да, как же я скучал по старым добрым рускоязычным форумам. На одного адекватного человека, который пытается помочь набИгает куча ...бланов, которые начинают рассказывать тебе какой ты придурок и вообще не жую ни в чем не смыслешь. Чувак, у тебя все хорошо? Может помощь какая нужна?
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877463
andrejjj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
flexgen, спасибо за помощь
...
Рейтинг: 0 / 0
Странное поведение при апдейте таблиц.
    #39877475
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejjjнабИгает куча ...блановСтоит ли на форум пенять, коли сам пишешь то же самое.
andrejjjспасибо за помощьВ принципе, дать бесценный совет "попытайся понять" можно было не дожидаясь, когда ты с четвертой попытки косвенно указал, что "не отрабатывает" это отсутствие строк.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Странное поведение при апдейте таблиц.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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