Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Странное поведение при апдейте таблиц. / 14 сообщений из 14, страница 1 из 1
16.10.2019, 18:52
    #39877261
andrejjj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение при апдейте таблиц.
Всем привет!
Подскажите пожалуйста, в какую сторону можно копать в моей ситуации.

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

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

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

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

commit;

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

commit;

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

Прям как у Козьмы Пруткова.
...
Рейтинг: 0 / 0
16.10.2019, 19:05
    #39877266
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение при апдейте таблиц.
andrejjjв какую сторону можно копать в моей ситуации.Копать в сторону чтения доки.
Чтобы тебе помогли, выложи ddl твоих таблиц, скрипт и т.п. Тесткейс, короче. А то, может, у тебя temp_1 - это gtt c delete on commit
...
Рейтинг: 0 / 0
16.10.2019, 23:45
    #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
17.10.2019, 00:03
    #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
17.10.2019, 00:07
    #39877343
andrejjj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение при апдейте таблиц.
flexgen,
Эээээ, нет. Я не большой спец в Оракле. Код я выложил. Имена таблиц правда поменял.
...
Рейтинг: 0 / 0
17.10.2019, 00:16
    #39877348
flexgen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение при апдейте таблиц.
andrejjjЭээээ, нет.

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

Если выполнить только select из второго insert' a - каков будет результат? Что-то возвращается?
...
Рейтинг: 0 / 0
17.10.2019, 00:21
    #39877349
andrejjj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение при апдейте таблиц.
flexgen,
Да, возвращаются идентичные наборы для эталонной базы и базы с ошибкой. Но в эталонной базе в таблицу TEMP_LINK данные из второго инсерта попадают. А в базе с ошибкой - нет.
...
Рейтинг: 0 / 0
17.10.2019, 00:28
    #39877352
andrejjj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение при апдейте таблиц.
Пробовал эмулировать второй инсерт таким запросом (в приложении). Для эталонной и ошибочной баз он выдает одинковый результат
...
Рейтинг: 0 / 0
17.10.2019, 07:41
    #39877403
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение при апдейте таблиц.
andrejjjЭээээ, нет. Я не большой спец в Оракле.Ты преувеличиваешь. Ты даун. И не то чтобы в Oracle, а вообще в БД. Тебе невозможно что-либо объяснить, даже если бы ты мог внятно сформулировать проблему, ибо не в коня корм.
...
Рейтинг: 0 / 0
17.10.2019, 09:08
    #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
17.10.2019, 10:19
    #39877461
andrejjj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение при апдейте таблиц.
elic, о да, как же я скучал по старым добрым рускоязычным форумам. На одного адекватного человека, который пытается помочь набИгает куча ...бланов, которые начинают рассказывать тебе какой ты придурок и вообще не жую ни в чем не смыслешь. Чувак, у тебя все хорошо? Может помощь какая нужна?
...
Рейтинг: 0 / 0
17.10.2019, 10:20
    #39877463
andrejjj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение при апдейте таблиц.
flexgen, спасибо за помощь
...
Рейтинг: 0 / 0
17.10.2019, 10:37
    #39877475
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение при апдейте таблиц.
andrejjjнабИгает куча ...блановСтоит ли на форум пенять, коли сам пишешь то же самое.
andrejjjспасибо за помощьВ принципе, дать бесценный совет "попытайся понять" можно было не дожидаясь, когда ты с четвертой попытки косвенно указал, что "не отрабатывает" это отсутствие строк.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Странное поведение при апдейте таблиц. / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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