Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Грабли с coalesce / 7 сообщений из 7, страница 1 из 1
04.04.2008, 18:04
    #35236772
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли с coalesce
select @@version
Adaptive Server Enterprise/15.0.2/EBF 14332/P/NT (IX86)/Windows 2000/ase1502/2486/32-bit/OPT/Thu May 24 04:10:36 2007


Код: plaintext
1.
2.
3.
4.
5.
6.
select
   T1.Field1,
   T2.Field2
from
   Table1 T1
   join Table2 T2 on (T2.KeyField=T1.KeyField)
отрабатывает нормально (возвращает N rows)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select
   T1.Field1,
   T2.Field2,
   coalesce(T1.Field1,T2.Field2)
from
   Table1 T1
   join Table2 T2 on (T2.KeyField=T1.KeyField)
не возвращает ничего (0 rows)

Посоветовали привести к одному типу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select
   T1.Field1,
   T2.Field2,
   coalesce(cast(T1.Field1 as numeric( 18 , 0 )),cast(T2.Field2 as numeric( 18 , 0 )))
from
   Table1 T1
   join Table2 T2 on (T2.KeyField=T1.KeyField)
аналогично (0 rows)

Что делатЪ? Кто виноватЪ?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.04.2008, 19:02
    #35236900
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли с coalesce
Обалдеть!!! Ж8-/ Вставил в isql ПЕРЕД возвращающим нулевой рекордсет select'ом (2), другой select и этот 2-й select - вернул все как положенно. Глюк 15-ки?

P.S. Выше приведенный пример - утрирован. На самом деле все гораздо сложнее и побольше. Однако замечено: coalesce корректно работает до определенного предела.
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.04.2008, 19:09
    #35236910
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли с coalesce
P.P.S. Если coalesce заменить на case || isnull - они тоже не выполняются, если идут первыми.
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.04.2008, 23:36
    #35237172
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли с coalesce
P.P.S. На
select @@version
Adaptive Server Enterprise/12.5.3/EBF 12875 ESD#4/P/NT (IX86)/OS 4.0/ase1253/1/32-bit/OPT/Thu Sep 08 11:27:35 2005

все oB! при любых раскладах (coalesce/case/isnull) и в любой последовательности. Значит, все-таки, - баг в 15-ке... :(
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
05.04.2008, 19:20
    #35237617
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли с coalesce
мой сервер:
select @@versionAdaptive Server Enterprise/15.0.2/EBF 14332/P/NT (IX86)/Windows 2000/ase1502/2486/32-bit/OPT/Thu May 24 04:10:36 2007

Код: plaintext
1.
select a.comp_id,b.adl_x,coalesce(a.comp_id,b.adl_x) from 
automation a join adl b on (a.ato_id=b.adl_id)

Нормально работает. возвращает N записей.
...
Рейтинг: 0 / 0
05.04.2008, 20:45
    #35237654
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли с coalesce
Dmitry
Код: plaintext
1.
2.
select a.comp_id,b.adl_x,coalesce(a.comp_id,b.adl_x) from
automation a join adl b on (a.ato_id=b.adl_id)
Нормально работает. возвращает N записей.

Ex_Soft
Выше приведенный пример - утрирован. На самом деле все гораздо сложнее и побольше. Однако замечено: coalesce корректно работает до определенного предела.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select
C.CONTRACT_ID,
coalesce(CA.COMMISSION_TYPE,IAP.AGENT_COMMISSION_TYPE) as COMMISSION_TYPE,
coalesce(CT1.CONTRACT_PARAM_NAME,CT2.CONTRACT_PARAM_NAME) as COMMISSION_TYPE_NAME,
case CA.COMMISSION_TYPE
   when  0  then CA.COMMISSION_VALUE
   when  1  then CA.COMMISSION_SUM
   else IAP.AGENT_COMMISSION
end as AGENT_COMMISSION
from
CONTRACT C
join CONTRACT_AGENTS CA on (CA.CONTRACT_ID=C.CONTRACT_ID)
join COMIS_TYPE CT1 on (CT1.CONTRACT_PARAM_ID=CA.COMMISSION_TYPE)
join INSURANCE_AGENTS IA on (IA.AGENT_ID=CA.AGENT_ID)
join INSURANCE_AGENTS_PARAM IAP on (IAP.AGENT_MASTER_INTERNAL_ID=IA.AGENT_INTERNAL_ID)
join COMIS_TYPE CT2 on (CT2.CONTRACT_PARAM_ID=IAP.AGENT_COMMISSION_TYPE)
where
(C.RECORD_STATE= 100 )
and (CA.RECORD_STATE= 100 )
and (CT1.RECORD_STATE= 100 )
and (IA.RECORD_STATE= 100 )
and (IAP.RECORD_STATE= 100 )
and (CT2.RECORD_STATE= 100 )
работает
Но стоит добавить
Код: 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.
select
C.CONTRACT_ID,
CA.AGENT_ID,
coalesce(CA.COMMISSION_TYPE,IAP.AGENT_COMMISSION_TYPE) as COMMISSION_TYPE,
coalesce(CT1.CONTRACT_PARAM_NAME,CT2.CONTRACT_PARAM_NAME) as COMMISSION_TYPE_NAME,
case CA.COMMISSION_TYPE
   when  0  then CA.COMMISSION_VALUE
   when  1  then CA.COMMISSION_SUM
   else IAP.AGENT_COMMISSION
end as AGENT_COMMISSION
from
CONTRACT C
join CONTRACT_AGENTS CA on (CA.CONTRACT_ID=C.CONTRACT_ID)
join COMIS_TYPE CT1 on (CT1.CONTRACT_PARAM_ID=CA.COMMISSION_TYPE)
join INSURANCE_AGENTS IA on (IA.AGENT_ID=CA.AGENT_ID)
join INSURANCE_AGENTS_PARAM IAP on (IAP.AGENT_MASTER_INTERNAL_ID=IA.AGENT_INTERNAL_ID)
join COMIS_TYPE CT2 on (CT2.CONTRACT_PARAM_ID=IAP.AGENT_COMMISSION_TYPE)
where
(C.RECORD_STATE= 100 )
and (CA.RECORD_STATE= 100 )
and (CT1.RECORD_STATE= 100 )
and (IA.RECORD_STATE= 100 )
and (IAP.RECORD_STATE= 100 )
and (CT2.RECORD_STATE= 100 )
и усьо...

Но!!! Если его тупо выполнить ДВА раза
Код: 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.
select
C.CONTRACT_ID,
CA.AGENT_ID,
coalesce(CA.COMMISSION_TYPE,IAP.AGENT_COMMISSION_TYPE) as COMMISSION_TYPE,
coalesce(CT1.CONTRACT_PARAM_NAME,CT2.CONTRACT_PARAM_NAME) as COMMISSION_TYPE_NAME,
case CA.COMMISSION_TYPE
   when  0  then CA.COMMISSION_VALUE
   when  1  then CA.COMMISSION_SUM
   else IAP.AGENT_COMMISSION
end as AGENT_COMMISSION
from
CONTRACT C
join CONTRACT_AGENTS CA on (CA.CONTRACT_ID=C.CONTRACT_ID)
join COMIS_TYPE CT1 on (CT1.CONTRACT_PARAM_ID=CA.COMMISSION_TYPE)
join INSURANCE_AGENTS IA on (IA.AGENT_ID=CA.AGENT_ID)
join INSURANCE_AGENTS_PARAM IAP on (IAP.AGENT_MASTER_INTERNAL_ID=IA.AGENT_INTERNAL_ID)
join COMIS_TYPE CT2 on (CT2.CONTRACT_PARAM_ID=IAP.AGENT_COMMISSION_TYPE)
where
(C.RECORD_STATE= 100 )
and (CA.RECORD_STATE= 100 )
and (CT1.RECORD_STATE= 100 )
and (IA.RECORD_STATE= 100 )
and (IAP.RECORD_STATE= 100 )
and (CT2.RECORD_STATE= 100 )

select
C.CONTRACT_ID,
===>CA.AGENT_ID,
coalesce(CA.COMMISSION_TYPE,IAP.AGENT_COMMISSION_TYPE) as COMMISSION_TYPE,
coalesce(CT1.CONTRACT_PARAM_NAME,CT2.CONTRACT_PARAM_NAME) as COMMISSION_TYPE_NAME,
case CA.COMMISSION_TYPE
   when  0  then CA.COMMISSION_VALUE
   when  1  then CA.COMMISSION_SUM
   else IAP.AGENT_COMMISSION
end as AGENT_COMMISSION
from
CONTRACT C
join CONTRACT_AGENTS CA on (CA.CONTRACT_ID=C.CONTRACT_ID)
join COMIS_TYPE CT1 on (CT1.CONTRACT_PARAM_ID=CA.COMMISSION_TYPE)
join INSURANCE_AGENTS IA on (IA.AGENT_ID=CA.AGENT_ID)
join INSURANCE_AGENTS_PARAM IAP on (IAP.AGENT_MASTER_INTERNAL_ID=IA.AGENT_INTERNAL_ID)
join COMIS_TYPE CT2 on (CT2.CONTRACT_PARAM_ID=IAP.AGENT_COMMISSION_TYPE)
where
(C.RECORD_STATE= 100 )
and (CA.RECORD_STATE= 100 )
and (CT1.RECORD_STATE= 100 )
and (IA.RECORD_STATE= 100 )
and (IAP.RECORD_STATE= 100 )
and (CT2.RECORD_STATE= 100 )
- первый резалтсет - пустой
, а второй резалтсет уже такой как надо...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
06.04.2008, 19:43
    #35238206
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Грабли с coalesce
Я в шоке
:
1. Просто добавил еще одну строку в таблицу - "кривой" запрос вернул только ее
2. Добавил еще один столбец для вывода - "кривой" запрос вернул весь рекордсет с первого раза.
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Грабли с coalesce / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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