powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / DB2 v8 FP12, FP13 - осторожно!
8 сообщений из 8, страница 1 из 1
DB2 v8 FP12, FP13 - осторожно!
    #34164400
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попытался перебраться с FP10 на FP13, но неудачно. Один из запросов стал давать неверные результаты. Как воспроизвести это вам на ваших базах на простом примере, я пока не знаю - одних IXF-ок на 23 гига, да в запросе таблиц десятка полтора. Упрощение запроса путём замены одного из VIEW на таблицу с эквивалентным содержимым (CREATE TABLE table LIKE view; INSERT INTO table SELECT * FROM view) "лечит" запрос, т.е. после этого он даёт верные результаты. Так что как выделить больное место, непонятно. Пока начну с сокращения содержимого таблиц.

У FP12 те же проблемы, а FP11 я не проверял, ибо в своё время забраковал из-за проблем с II и репликацией.

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

Короче, мне пришлось оставаться на FP10, а вам советую быть бдительными.
...
Рейтинг: 0 / 0
DB2 v8 FP12, FP13 - осторожно!
    #34166821
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как это выглядит (я несколько подсократил реальный запрос, но глюк остался):
Код: plaintext
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.
create view aplus.trusted_stage_view as
with
  cardNo(client_id, fromDate, toDate, cardno) as (
    SELECT client_id, issuedate_d, expiredate_d, cardno
    FROM FFP_REPL.CLIENT
  ),
  draft1 as (
    SELECT 
      st.farebasis_is_good,
      ca.cardno ffp_Card_No, 
      st.sirena_psgrname passenger_name,
      st.anext_coupon_no coupon_no,
      st.airlinenumcode,
      st.serialno,
      st.anext_check_digit check_digit,
      st.anext_farebasis farebasis,
      st.anext_flightno flightno,
      st.anext_flightdate flightdate,
      st.origin,
      st.destination
    FROM 
      APLUS.SIR_TICKET_WITHOUT_FFP st
      JOIN 
      APLUS.CREDENTIAL cr ON 
        (cr.credential_type, cr.credential_number) =
        (st.sirena_pdoc_type, st.sirena_pdoc_number)
      JOIN 
      APLUS.PERSON p ON
        (p.person_id = cr.person_id)
      JOIN
      APLUS.CLIENT2PERSON_LiNK c2p ON
        (p.person_id = c2p.person_id)
      JOIN 
      FFP_REPL.CLIENT cl ON
        (cl.client_id = c2p.client_id)
      JOIN
      cardno ca
      ON cl.client_id = ca.client_id
    WHERE 
      st.farebasis_is_good= 1 
      AND cr.valid_type= 1 
      AND st.anext_flightdate BETWEEN ca.fromDate AND ca.toDate
      AND EXISTS (
        SELECT * 
        FROM APLUS.PERSON_NAME pn
        WHERE (pn.person_id, pn.firstname, pn.lastname)
            = (p.person_id, st.firstname, st.lastname)
          AND pn.valid_type= 1 
      )
      and (cl.firstname, cl.lastname)
        = (st.firstname, st.lastname)
      and (ca.cardno = rtrim(st.anext_ffpcard)
        or rtrim(value(st.anext_ffpcard,''))=''
      )  
    )
select d.*
from draft1 d 

Получаем на выходе (select * from aplus.trusted_stage_view)
Код: plaintext
1.
2.
3.
4.
FAREBASIS_IS_GOOD SERIALNO             ORIGIN DESTINATION FLIGHTNO   FLIGHTDATE
----------------- -------------------- ------ ----------- ---------- ----------
                1 E6101029324          MOW    TJM         453        28.10.2003
                1 E6102758863          SGC    KRR         603        03.04.2004

Откуда это взялось, когда в APLUS.SIR_TICKET_WITHOUT_FFP значится
Код: plaintext
1.
2.
3.
4.
FAREBASIS_IS_GOOD SERIALNO             ORIGIN DESTINATION FLIGHTNO   FLIGHTDATE
----------------- -------------------- ------ ----------- ---------- ----------
                1 E6101029324          MOW    TJM         453        28.10.2003
                0 E6102758863          SGC    KRR         603        03.04.2004
?

Второй записи (с SERIALNO='E6102758863') на выходе не должно быть, потому что в условиях указано farebasis_is_good=1, а она не только есть, но в поле ещё и значится 1 вместо 0.

Такой результат у меня на маленьком подмножестве данных (360 кил IXF), который я готовлю для возможной демнострации в другом месте. На полном наборе (23 гига IXF) он выглядит тоже странно, но по-другому - при select * from aplus.trusted_stage_view напротив билета E6102758863 в FAREBASIS_IS_GOOD стоит 0 (и это несмотря на WHERE farebasis_is_good=1 в теле запроса). Если же содержимое APLUS.SIR_TICKET_WITHOUT_FFP выгрузить во вспомогательную таблицу, то результат оказывается верным, билета E6102758863 в наборе не оказывается.

Такое поведение я увидел в DB2v8 FP12 и FP13. V9 я пока не проверял.
...
Рейтинг: 0 / 0
DB2 v8 FP12, FP13 - осторожно!
    #34167012
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поле farebasis_is_good во VIEW по имени APLUS.SIR_TICKET_WITHOUT_FFP определено как
Код: plaintext
1.
2.
3.
 
  case when fb.farebasis is null then  0  else  1  end
    as farebasis_is_good


Посмотрю "Show optimized SQL text"... В FP10 я нахожу эту строку:
Код: plaintext
1.
2.
3.
4.
5.
...
WHERE (CASE 
WHEN Q4.$C14 IS NULL 
THEN  0  
ELSE  1  END =  1 ))

В FP13 гордо красуется
Код: plaintext
SELECT  1  AS "FAREBASIS_IS_GOOD"...
и никаких CASE нет и следа. Это - в варианте с маленьким количеством данных. Вариант с большим, очевидно, отличается, но тоже плох.
...
Рейтинг: 0 / 0
DB2 v8 FP12, FP13 - осторожно!
    #34172246
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
CREATE FUNCTION APLUS.word(some_string VARCHAR( 1000 ), n INTEGER)
RETURNS VARCHAR( 1000 )
LANGUAGE SQL
DETERMINISTIC
NO EXTERNAL ACTION
CONTAINS SQL
BEGIN ATOMIC
  DECLARE head VARCHAR( 1000 );
  DECLARE tail VARCHAR( 1000 );
  DECLARE i INTEGER;
  IF n <= 0  THEN 
    RETURN '';
  END IF;
  SET i = n;
  SET tail = RTRIM(LTRiM(some_string));
  WHILE i >  0  DO
    SET i = i -  1 ;
    SET head = 
        SUBSTR(tail, 1 ,CASE LOCATE(' ',tail)
          WHEN  0  THEN LENGTH(tail)
          ELSE LOCATE(' ',tail) -  1 
        END);
    SET tail = 
        LTRIM(SUBSTR(tail,CASE LOCATE(' ',tail)
          WHEN  0  THEN LENGTH(tail) +  1 
          ELSE LOCATE(' ',tail)
        END));
  END WHILE;
  RETURN head;
END
@

CREATE TABLE T1(
  t1_f1 INTEGER NOT NULL,
  t1_f2 VARCHAR( 10 )
)
@

INSERT INTO T1 VALUES
( 1 , '1x???'), 
( 2 , '2x???')@

-- aplus.SIRENA_PAXINFO_table
CREATE TABLE T2(
  t2_f1 INTEGER NOT NULL,
  t3_f1 VARCHAR( 18 ),
  t1_f1 INTEGER,
  t2_f2 VARCHAR( 100 )
)
@

INSERT INTO T2 VALUES
( 1 ,'1???', 1 , 'AAA1 AAA2 AAA4'),
( 2 ,'2???', 2 , 'BBB1 BBB2 BBB3')
@

CREATE TABLE T3(
  t3_f1 VARCHAR( 20 ) not null,
  t3_f2 integer NOT NULL
)
@

INSERT INTO T3 VALUES
('1???', 1 )@

CREATE VIEW V2 AS 
SELECT 
  CASE WHEN T3.t3_f1 IS NULL THEN  0  ELSE  1  END is_valid,
  APLUS.WORD(T2.t2_f2, 1 ) ln,
  T2.*
FROM T2 
  LEFT JOIN T3 ON t2.t3_f1=t3.t3_f1
@

CREATE VIEW V1 AS
SELECT T1.t1_f2, V2.*
FROM T1 JOIN V2 ON T1.t1_f1 = V2.t1_f1
WHERE V2.is_valid =  1 
@

RUNSTATS ON TABLE vvm.t1 WITH DISTRIBUTION AND DETAILED INDEXES ALL@
RUNSTATS ON TABLE vvm.t2 WITH DISTRIBUTION AND DETAILED INDEXES ALL@
RUNSTATS ON TABLE vvm.t3 WITH DISTRIBUTION AND DETAILED INDEXES ALL@

SELECT * FROM V2@
SELECT * FROM V1@

DROP TABLE T1@
DROP TABLE T2@
DROP TABLE T3@
DROP VIEW V1@
DROP VIEW V2@

drop FUNCTION APLUS.word(varchar( 1000 ), INTEGER)@

terminate@
...
Рейтинг: 0 / 0
DB2 v8 FP12, FP13 - осторожно!
    #34172251
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT * FROM V1
* в FP10 даёт одну строку (правильно)
* в FP12 (и, по-видимому, в FP13) даёт две строки (ошибка)

Вызов функции APLUS.WORD существенен. Без него и в FP12 получается одна строка.
...
Рейтинг: 0 / 0
DB2 v8 FP12, FP13 - осторожно!
    #34172810
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В v9 и v9fp1 скрипт отрабатывает правильно.
...
Рейтинг: 0 / 0
DB2 v8 FP12, FP13 - осторожно!
    #34952518
db2adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так чем же дело-то закончилось?
8FP15 или 9.1?
...
Рейтинг: 0 / 0
DB2 v8 FP12, FP13 - осторожно!
    #34971894
db2adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
db2admТак чем же дело-то закончилось?
8FP15 или 9.1?
Похоже дело закончилось переходом на oracle и ответ теперь надо искать в другом форуме :)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / DB2 v8 FP12, FP13 - осторожно!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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