powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Странные возможности Sybase ASE
6 сообщений из 31, страница 2 из 2
Странные возможности Sybase ASE
    #34490203
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izumov Alex пишет:

> Селект возвращал более одного значения.. )

Но это не ошибка. Скорее - фича. Нигде не написано, что
подзапросы в ветках, условия которых FALSE, не будут выполняться.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Странные возможности Sybase ASE
    #34494725
Izumov Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы не говорим, что ОШИБКА, мы говорим о СТРАННОСТЯХ %) Для меня такое поведение странно, тк НЕ интуитивно понятно, почему и поделился, чтобы другие не натыкались! ;) в АСЕ много таких "загадок"!
...
Рейтинг: 0 / 0
Странные возможности Sybase ASE
    #34505190
Фотография DimaU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наблюдал действительное такое с "count(*)"
Интересно - в будущих версиях 15... они исчезнут?
---
Всего всего! Tор-Analytics
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Странные возможности Sybase ASE
    #36664843
Еще одна странная особенность - ошибка точности

Код: plaintext
1.
2.
3.
4.
declare @a numeric( 20 , 2 ),@b numeric( 20 , 2 ), @c numeric( 20 , 2 )
select @a= 25 . 3 , @b= 3 
select @c=@a/@b
select @c

Truncation error occurred.
Command has been aborted.


Большинство других СУБД (ASA, Ms SQL, Oracle) в такой ситуации транкейтят до той точности, которую позволяет тип данных.
...
Рейтинг: 0 / 0
Странные возможности Sybase ASE
    #36664891
Еще один случай из практики наших коллег:


интересное поведение ASE15 в случае, если в запросе есть outer join и order by.
Вот такой тестовый пример: есть 2 таблицы:

Код: 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.
create table tstout1
(
ID numeric( 10 , 0 ) identity,
NUM_DOG varchar( 16 ) not null,
ALL_NAME varchar( 16 ) not null,
CITY numeric( 10 , 0 ) null,
constraint tsto_ID_PK primary key(ID)
)

create table tstout2
(
ID numeric( 10 , 0 ) identity,
DESCRIP varchar( 10 ) null,
constraint tsto2_ID_PK primary key(ID)
)

insert tstout2 (DESCRIP) values ('1')
insert tstout2 (DESCRIP) values ('2')

insert tstout1 (NUM_DOG,ALL_NAME,CITY) values ('10/05/01','AAAA', 1 ) 
insert tstout1 (NUM_DOG,ALL_NAME,CITY) values ('10/05/02','BBBB', 2 ) 
insert tstout1 (NUM_DOG,ALL_NAME,CITY) values ('10/05/06','FFFF', 1 ) 
insert tstout1 (NUM_DOG,ALL_NAME,CITY) values ('10/05/07','GGGG', 2 ) 
insert tstout1 (NUM_DOG,ALL_NAME) values ('10/05/12','KKKK') 
insert tstout1 (NUM_DOG,ALL_NAME) values ('10/05/13','KKKK1')

И запрос 1:

Код: plaintext
1.
2.
3.
4.
5.
select convert(int,isnull(CT.DESCRIP,'0')) as REGION,
c.NUM_DOG,max(c.ALL_NAME)
from tstout1 c
left join tstout2 CT on c.CITY=CT.ID
group by CT.DESCRIP,c.NUM_DOG
order by  1 

Он выдает результат
REGION NUM_DOG
----------- ---------------- ----------------
0 10/05/12 KKKK
0 10/05/13 KKKK1
1 10/05/01 AAAA
1 10/05/06 FFFF
2 10/05/02 BBBB
2 10/05/07 GGGG

(6 rows affected)

Если же мы добавим в запрос order by по полю внешней таблицы, которого нет в select-листе (да, я знаю, что конструкция не соответствует стандарту, но сервер ошибок не выдает), например:

Запрос 2:

Код: plaintext
1.
2.
3.
4.
5.
select convert(int,isnull(CT.DESCRIP,'0')) as REGION,
c.NUM_DOG,max(c.ALL_NAME)
from tstout1 c
left join tstout2 CT on c.CITY=CT.ID
group by CT.DESCRIP,c.NUM_DOG
order by  1 ,c.ID

то результат будет другим:
REGION NUM_DOG
----------- ---------------- ----------------
1 10/05/01 AAAA
1 10/05/06 FFFF
2 10/05/02 BBBB
2 10/05/07 GGGG

(4 rows affected)

То есть left join превратился в inner.

Что забавно, в случае Transact-sql joins:
Запрос 3:

Код: plaintext
1.
2.
3.
4.
5.
select convert(int,isnull(CT.DESCRIP,'0')) as REGION,
c.NUM_DOG,max(c.ALL_NAME)
from tstout1 c,tstout2 CT
where c.CITY*=CT.ID
group by CT.DESCRIP,c.NUM_DOG
order by  1 ,c.ID

все работает корректно.
REGION NUM_DOG
----------- ---------------- ----------------
0 10/05/12 KKKK
0 10/05/13 KKKK1
1 10/05/01 AAAA
1 10/05/06 FFFF
2 10/05/02 BBBB
2 10/05/07 GGGG

(6 rows affected)
...
Рейтинг: 0 / 0
Странные возможности Sybase ASE
    #36666955
по 18:04 горбуха - set arithabort numeric_truncation off спасает отца русской демократии
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Странные возможности Sybase ASE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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