powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 8 -> ASA 9
25 сообщений из 41, страница 1 из 2
ASA 8 -> ASA 9
    #36451543
amakhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил попробовать базу, которая работает под ASA 8 запустить под ASA 9. Сходу наступил на пару граблей, обе на запросе
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  select ..., s=Sum(...) 
from
    table1 as t1,
    table2 as t2
    left outer join table3 as t3 on(...) 
    where t1.f1 = t2.f1 
    group ... 
Во-первых не хочет понимать соединение через where, когда меняю на inner join всё работает, вычитал, что вроде должно лечится через настройку tsql_outer_joins - не лечится.

Во-вторых матюкается на null value в аггрегатной функции, но это как раз точно лечится через allow_nulls_by_default, но в связи с этим вопрос можно ли как то эту настройку указать в командной строчке при запуске сервера?

Какие еще подводные камни можно ожидать при переходе?
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36451651
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amakhin пишет:

> Решил попробовать базу, которая работает под ASA 8 запустить под ASA 9.
> Сходу наступил на пару граблей

Это же надо уметь... я под переход 8 -> 9 и 9 -> 10 не правил вообще
ничего ;).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36451679
amakhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim2000, молодец, а по теме что-то сказать?
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36451834
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amakhin пишет:

> а по теме что-то сказать?

При переходе никаких граблей не обнаружено.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36451966
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Берем раздел "Что нового" от девятки.
Читаем, думаем, смотрим в свой код на восьмерке, меняем, переделываем.
Все остальное - при тестировании под 9
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36451969
amakhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim2000, а как обойти то что я описал?
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36451977
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
amakhin,
Опцией tsql_outer_joins у меня лечится при переходе с 7 на 11.
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36452071
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antand пишет:

> Опцией tsql_outer_joins у меня лечится при переходе с 7 на 11.

Она тут вообще не при чём.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36452442
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amakhin,
Боюсь что не лечится оптимизатор другой, ты лучше выгрузи структуру базы в sql-скрипт и попробуй загрузить в 9-ку, там сразу и вылезят несовместимости...
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36452807
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amakhinВо-первых не хочет понимать соединение через where, когда меняю на inner join всё работает, вычитал, что вроде должно лечится через настройку tsql_outer_joins - не лечится.

Во-вторых матюкается на null value в аггрегатной функции, но это как раз точно лечится через allow_nulls_by_default, но в связи с этим вопрос можно ли как то эту настройку указать в командной строчке при запуске сервера?

1. Бред. Что значит не хочет понимать. Приведите текст запроса и ответ сервера.
2. Это вроде от того, что клиента используете старого. Сервак шлет предупреждение. Девяточный клиент нормально их обрабатывает, те клиенты, которые ниже версией, выводят его как ошибку. Уже писал когда-то на форуме, могли бы в поиске найти.
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36453472
amakhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Orlovamakhin,
Боюсь что не лечится оптимизатор другой, ты лучше выгрузи структуру базы в sql-скрипт и попробуй загрузить в 9-ку, там сразу и вылезят несовместимости...

Боюсь что этот вариант не подойдет, запрос в процедуре, когда я запускаю альтер, то всё сохраняется на-ура, а при исполнении вылезает ошибка.
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36453480
amakhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iLLer
1. Бред. Что значит не хочет понимать. Приведите текст запроса и ответ сервера.
2. Это вроде от того, что клиента используете старого. Сервак шлет предупреждение. Девяточный клиент нормально их обрабатывает, те клиенты, которые ниже версией, выводят его как ошибку. Уже писал когда-то на форуме, могли бы в поиске найти.

1. Запрос уже привел, что там еще привести???
ответ сервера "illegal reference to correlation name t1"

замена запроса на
Код: plaintext
1.
2.
3.
4.
5.
6.
  select ..., s=Sum(...) 
from
    table1 as t1,
    inner join table2 as t2 on t1.f1 = t2.f1
    left outer join table3 as t3 on(...)  
    group ...
фиксит проблему

2. Да, клиент это и не видит как ошибку, но в 8-ке даже предупреждения не было.
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36453529
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amakhin,

1. Не держите людей за дураков. Я не просто так написал приведите текст запроса. На Ваш запрос мой сервер выдает ошибку "Syntax error near '.' on line 1". Уверяю, что соединение таблиц через WHERE в 9-ке работает на ура. И чтобы Вас ткнуть носом нужен полный текст запроса, а не Ваша интерпретация его.
Illegal reference к примеру может означать, что Вы пытаетесь в условии по левому соединению table3 использовать поля из table1. Это говорит только о некорректности написания запроса, и то, что он работал раньше где-то, говорит скорее о фичи/баге той версии, чем о недоработке в этой. Старый оптимизатор не видел двусмысленности и глотал все что суют, а новый - видит. Писать запросы изначально нужно корректно, по стандарту, и никаких проблем не будет.

2. Под клиентом я подразумевал именно драйвер, установленный на клиенте(в случае ODBC соединения). Нужно глядеть его версию. Вы написали, что там у Вас грабли. Грабли, я понимаю как нарушение алгоритмики работы имеющегося ПО. Так вот, если Ваша программа спокойно работает и ничего не видит, то не вижу проблем. Если же Ваша программа встает в раскоряку из-за неспособности драйвера корректно обработать эту ситуацию, то обновите сабейзовского клиента, тогда в Вашей программе не будет нарушена алгоритмика работы, и после запроса она не будет уходить в исключение.
Если трогать "allow_nulls_by_default", то это может аукнуться совершенно в другой степи, т.к. 9-ка и 6/7/8-ка по умолчанию работают одинаково, а вот с этой опцией 9-ка будет работать уже не как 6/7/8-ка.
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36453541
amakhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iLLer,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  select t.MaxInsurNum,t.MaxInsurName,t."Comment",l.Licname,
    s=Sum(ft.Finance) from
    MaxInsur as t,Licenses as l left outer join
    FinTreat as ft on(t.MaxInsurNum = ft.MaxInsurNum) where
    t.LicNum = l.LicNum and MaxInsurName <> 'DELETE'
    group by t.MaxInsurNum,t.MaxInsurName,t."Comment",l.Licname order by
    t.MaxInsurNum asc
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36453544
amakhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iLLer,
вы правы, если я меняю местами таблицы, то начинает работать. Но до сих пор не совсем понимаю какое имеет значение порядок таблиц в from.
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36453602
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amakhiniLLer,
вы правы, если я меняю местами таблицы, то начинает работать. Но до сих пор не совсем понимаю какое имеет значение порядок таблиц в from.

Судя по запросу, там именно то, что я и предположил. Проблема в том, что использование левого соединения подразумевает что в его условии используются только поля из соединяемых таблиц. Ссылаясь в условии левого соединения на третью свободную таблицу (t), сервер хочет вынести это условие на уровень выше, где t и подсоединяется к другим таблицам, т.е. на where запроса, но в этом случае пропадает смысл левого соединения, потому он и не может вынести.
Указание в явном виде сначала соединения t и l по условию "t.LicNum = l.LicNum" дает право при подсоединении слева FinTreat в условии использовать ссылки на обе таблицы и на t и на l.
Проблема не в порядке следования таблиц во from, а в том, что к чему подсоединяется и как это указывается. Три таблицы можно пересечь множеством способов и получить иное множество различных результатов. From - это не мясорубка.

В Вашем случае есть два правильных варианта:

Код: plaintext
1.
2.
3.
4.
select t.MaxInsurNum,t.MaxInsurName,t."Comment",l.Licname,Sum(ft.Finance)
from Licenses as l,MaxInsur as t left outer join FinTreat as ft on (t.MaxInsurNum = ft.MaxInsurNum)
where t.LicNum = l.LicNum and MaxInsurName <> 'DELETE'
group by t.MaxInsurNum,t.MaxInsurName,t."Comment",l.Licname
order by t.MaxInsurNum asc

Код: plaintext
1.
2.
3.
4.
select t.MaxInsurNum,t.MaxInsurName,t."Comment",l.Licname,Sum(ft.Finance)
from MaxInsur as t inner join Licenses as l on t.LicNum = l.LicNum left outer join FinTreat as ft on (t.MaxInsurNum = ft.MaxInsurNum)
where MaxInsurName <> 'DELETE'
group by t.MaxInsurNum,t.MaxInsurName,t."Comment",l.Licname
order by t.MaxInsurNum asc

Если бы подключение таблицы ft требовало ссылок и на t и на l, то прошел бы только второй вариант.

P.S.: Остается один вопрос. В чем сакраментальный смысл левого подсоединения, если по этой таблице берется сумма и только сумма? Там оно совершенно не нужно.
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36453713
amakhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iLLer, спасибо за подробное объяснение, я понял логику работы. Честно говоря, нельзя сказать что она прозрачна. Т.е., да по вашему объяснению все логично, но тем не менее нигде до этого не встречал разбора работы сайбейзовского селекта, хотя я с ASA знаком можно сказать поверхностно.
Я бы мог предболожить что оптимизатор сделает full join из таблиц во from, потом приложит к ним left join и условия из where. В таком случае прошёл бы и мой первый вариант. (И почему-то уверен что он пройдёт в MS SQL хотя надо проверить)
Сейчас я этот запрос и написал бы по вашему второму варианту, даже не зная подноготной работы оптимизатора, но этому коду уже лет 8, так что может и простительно.
По поводу
автор
В чем сакраментальный смысл левого подсоединения, если по этой таблице берется сумма и только сумма? Там оно совершенно не нужно.

А если в таблице fintreat не окажется ни одной записи для сущности из MaxInsur, то разве при inner join мы не потеряем эту запись из этой таблицы?

PS есть ли какой-то запрос позволяющий вывести текст всех хранимых процедур из базы?

PPS обнаружил что функции REWRITE тоже не нравится мой вариант, напишу наверно какой-то запрос или цикл с этой функцией по всем процедурам чтобы проверить их работоспособность.
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36453720
amakhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уже обнаружил что тут работает sp_helptext
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36453767
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amakhin
А если в таблице fintreat не окажется ни одной записи для сущности из MaxInsur, то разве при inner join мы не потеряем эту запись из этой таблицы?

Потеряем. А разве потеряные строки смогут что-то изменить в Sum(ft.Finance), если в их случае ft.Finance is null, и они и так пролетят мимо кассы?!!
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36453770
amakhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iLLer,
насколько я помню логику программы там основная задача вывести полный список из MaxInsur, a соединение с FinTreat похоже было добавлено позже для добавочной информативности.
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36453801
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amakhinпочему-то уверен что он пройдёт в MS SQL
Ну вообще-то мы сейчас обсуждаем ASA, причём тут MSSQL ;)?
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36453851
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amakhin,

Ну раз это нужно, значит надо с левым подсоединением. Только нужно экранировать Sum(isnull(ft.Finance,0))
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36454238
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amakhinSergey Orlovamakhin,
Боюсь что не лечится оптимизатор другой, ты лучше выгрузи структуру базы в sql-скрипт и попробуй загрузить в 9-ку, там сразу и вылезят несовместимости...

Боюсь что этот вариант не подойдет, запрос в процедуре, когда я запускаю альтер, то всё сохраняется на-ура, а при исполнении вылезает ошибка.
Я же сказал оптимизатор разный, кстати, если делать alter, то ничего не происходит, а вот если удалить, а затем создать...
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36456398
amakhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Orlov
Я же сказал оптимизатор разный, кстати, если делать alter, то ничего не происходит, а вот если удалить, а затем создать...

....то тоже ничего не происходит.

Как выявить такие запросы я написал выше.

Кстати про разный оптимизатор это понятно, но это не ответ. Синтаксически запрос был правильный. Или всё таки кто-то знает место в документации описывающее эту особенность?
...
Рейтинг: 0 / 0
ASA 8 -> ASA 9
    #36456403
amakhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iLLer, экранировать или нет - это как раз зависит от обработки на клиенте, и смысл будет разные или отсутсвие записей или нулевые обороты.
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 8 -> ASA 9
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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