powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / case во view
29 сообщений из 29, показаны все 2 страниц
case во view
    #35708693
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select @@version
Adaptive Server Enterprise/12.5.1/EBF 11428/P/NT (IX86)/OS 4.0/ase1251/1823/32-bit/OPT/Wed Sep 17 11:10:54 2003

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

ЭстЪ view с case:
Код: plaintext
1.
2.
3.
4.
5.
....
   D.DOC_SERIES,
   D.DOC_NO,
   D.DOC_SERIES||(case when (D.DOC_SERIES is not null) and (D.DOC_NO is not null) then ' ' end)||(case when D.DOC_NO is not null then 'N ' end)||D.DOC_NO as DOC_FULL,
....
И все выводиться в ней по-честному и правильно. В свою очередь, эта view'ха дергается из другой:
Код: plaintext
1.
2.
3.
4.
....
   vD.DOC_TYPE_NAME,
   vD.DOC_FULL,
....
так вот: если убрать vD.DOC_FULL , то vD.DOC_TYPE_NAME - такое, какое ЭстЪ на самом деле. Если же с vD.DOC_FULL , то vD.DOC_TYPE_NAME - NULL.

Сакраментальный вопрос: Кто виноватЪ? Что делатЪ?

Не... Можно, конечно извратиться, по сути, продублировав
Код: plaintext
1.
2.
3.
4.
....
   vD.DOC_TYPE_NAME,
   vD.DOC_SERIES||(case when (vd.DOC_SERIES is not null) and (vD.DOC_NO is not null) then ' ' end)||(case when vD.DOC_NO is not null then 'N ' end)||vD.DOC_NO as DOC_FULL,
....
тока ж не хотца...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35708705
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внутри первого вьювера DOC_TYPE_NAME тоже в таблице с алисом d находится или другой ?
...
Рейтинг: 0 / 0
case во view
    #35708707
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. vD.DOC_FULL тоже ж NULL
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35708722
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Внутри первого вьювера DOC_TYPE_NAME тоже в таблице с алисом d находится или другой ?

В другой... View'хе... Игла в яйце, яйцо в утке, утка в...

P.P.S.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

весь это бутерброд - все сухо...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35709096
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft пишет:

> D.DOC_SERIES||(case

А что за операция || ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35709130
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Ex_Soft пишет:

> D.DOC_SERIES||(case

А что за операция || ?
string concatenation in WatcomSQL
...
Рейтинг: 0 / 0
case во view
    #35709204
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
in WatcomSQL

Гм... А я всегда и везде его юзаю... Даже в дядьке Грабере он ЭстЪ...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35709473
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
White Owl
in WatcomSQL

Гм... А я всегда и везде его юзаю... Даже в дядьке Грабере он ЭстЪ...Хы. Давненько я стандарты не читал... Действительно есть.
А в документации на ASE, оно не упомянуто. Вот из ASE 12.5, глава String concatenation operator:
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc36271_36272_36273_36274_1250/html/refman/refman236.htm
Тем не менее, в ASE оператор || действительно работает.

Хотя, все-же тут есть разница между Transact & Watcom. В Transact (и стандарте) оно работает только над char и varchar, а в Watcom оно при нужде еще и прогоняет операнды через convert(varchar). То есть в WatcomSQL можно написать `select 'aaa' || 345;` и получить 'aaa345'. А ASE на это выругается.
...
Рейтинг: 0 / 0
case во view
    #35709538
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это все - хорошо... А по сути вопроса?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35710877
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
Это все - хорошо... А по сути вопроса?

По сути вопроса делайте 2 плана с vD.DOC_FULL и без него. Я правда не силен в оптимизаторе АСЕ, но вот в АСА встречался с такой вещью - оптимизатор брал все вьюверы, разворачивал их в запрос, убирал таблицы, на которых нет ссылок и с которых не берутся столбцы и в зависимости от того, что ставил в SELECT, результаты мягко говоря разнились. Поэтому сравните 2 плана - идентичны они или нет и доложите сюда о результатах.
...
Рейтинг: 0 / 0
case во view
    #35712809
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да... Планы отличаются...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
case во view
    #35767971
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подыму (/me думает: бо достало в корень уже Ж8-/) Какие будут у кого идеи/мЫсли/предложения?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35768519
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftКакие будут у кого идеи/мЫсли/предложения?
У меня давным давно сформировалась мысль в отношении проектирования БД - не делать сложные вьюхи, ссылающиеся друг на друга. Поэтому как свое предложение - перепешите вью так, чтобы он не ссылался на другие, причем не просто вставив текстом подзапрос вместо используемого вьювера, а напишите его с нуля, то есть оптимизировав.
...
Рейтинг: 0 / 0
case во view
    #35768536
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
перепешите

Сегодня встал спозаранку, обуреваемый такой же мыслью. Но как посмотрел в скольких местах это все хозяйство юзается - творческий энтузизим пропал напрочЪ Ж8-/
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35768955
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
ASCRUS
перепешите

Сегодня встал спозаранку, обуреваемый такой же мыслью. Но как посмотрел в скольких местах это все хозяйство юзается - творческий энтузизим пропал напрочЪ Ж8-/
_________________
"Helo, word!" - 17 errors 56 warnings

Ну так вложенные вьюверы оставьте и не трогайте. Перепишите только верхний, сделав только нужное кол-во соединений и исключив подзапросы. Тогда все Ваше хозяйство и будет продолжать работать как обычно.
...
Рейтинг: 0 / 0
case во view
    #35769243
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Ну так вложенные вьюверы оставьте и не трогайте. Перепишите только верхний

Ну, дык, view, как раз, и создавались, чтобы в тысячи местах не писать одно и тоже. Сами по себе они, практически, пользы и применения не имеют. Просто брались common'овский, часто повторяемые join'ы и оформлялись в виде view. IMHO, я так понимаю, одно из основных предназначений view, как раз, в этом - воплотить в себе часто используемые запросы/части запросов.
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35769576
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
ASCRUS
Ну так вложенные вьюверы оставьте и не трогайте. Перепишите только верхний

Ну, дык, view, как раз, и создавались, чтобы в тысячи местах не писать одно и тоже. Сами по себе они, практически, пользы и применения не имеют. Просто брались common'овский, часто повторяемые join'ы и оформлялись в виде view. IMHO, я так понимаю, одно из основных предназначений view, как раз, в этом - воплотить в себе часто используемые запросы/части запросов.
_________________
"Helo, word!" - 17 errors 56 warnings

В моем представлении view это оформление некой физической модели сущностей БД в логическую, то есть некий слой, соединяющий физические сущности и представляющий их в виде логических. Как повторно используемый код view плохо выглядят хотя бы из за того, что при использовании из view других view, мы в итоге имеем подзапросы и повышенную нагрузку на оптимизатор и сервер. Все таки я считаю, что запросы должны писаться оптимизированными, а не собираться с тучи унифицированных подзапросов. Например, в Вашем случае, легче наверное было бы сделать вычисляемое поле DOC_FULL в таблице, из за которого не пришлось бы в итоге писать вью и организовывать вложенность вьюверов. Если Вы хотите выделять логическое представление данных, специально подготовленное для клиентской или отчетной части, то для этого мне кажется гораздо перспективнее использовать ХП, в которых для сложной обработки данных можно задействовать те же временные таблицы. Вообще IMHO РСУБД не любят унификации на уровне повторно используемого кода, даже вложенность ХП или использование UDF уже серьезно снижает производительность. Поэтому, в случаях, когда приходится писать один и тот же код, я предпочитаю использовать метод паттернов - например вместо того, чтобы обеспечить некую централизованную обработку проверки из всех триггеров БД, я не пишу супер пупер ХП, которая вызывается со всех триггеров и в ней для обработки пытаются получиться все доступные поля в триггере, а пишу шаблон генерации триггера с параметрами имени таблицы в ISQL и просто запускаю его там, указывая имя таблицы, на которою нужно сгенерить триггер.
...
Рейтинг: 0 / 0
case во view
    #35770417
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
сделать вычисляемое поле

К сожалению - в ASE нЭт вычисляемых полей
ASCRUS
оформление некой физической модели сущностей БД в логическую, то есть некий слой, соединяющий физические сущности и представляющий их в виде логических

Вот оно, как раз, так и выглядит. Т.е. есть таблица документов в которой указаны ИД документа, ИД типа документа, ИД контрагента, ИД контрагента, выдавшего этот документ и пр ИД\'шки. А view, как раз, и вытягивает эту всю информацию, заменяя ИД\'шки на соответствующие значения.
ASCRUS
Как повторно используемый код view плохо выглядят

Я, м.б., слегка некорректно выразился. Во view заворачивается нормальная развертка выше указанных ИД\'шек. Т.е. если бы где-то эту информацию и использовать, то, все равно, в каждом месте нужно написать кучу join\'ов для развертки. Поэтому вот такие развертки и оформлены в виде view.
ASCRUS
повторно используемый код...в итоге имеем подзапросы и повышенную нагрузку на оптимизатор и сервер

позволю себе с Вами не согласиться. Насколько я знаю view подставляются. Т.е.
Код: plaintext
\ncreate view vDoc\nas\nselect\n   D.DocId,\n   C.ContragentName\n   ...\nfrom\n   Doc\n   join Contragent C on (C.ContragentId=D.ContragentId)\n
в
Код: plaintext
\nselect\n   A.AgentId\n   vD.ContragentName\nfrom\n   Agent A\n   join vDoc vD on (vD.DocId=A.DocId)\n
в конечном итоге преобразовывается в
Код: plaintext
\nselect\n   A.AgentId\n   С.ContragentName\nfrom\n   Agent A\n   join Doc D on (D.DocId=A.DocId)\n   join Contragent C on (C.ContragentId=D.ContragentId)\n
и потом тока это подвергается оптимизации.
ASCRUS
гораздо перспективнее использовать ХП

с этим, как раз, еще хуже - select from SP в ASE тоже - нЭт
ASCRUS
метод паттернов

ну... мой случай - совсем другой...
Впрочем, мы - отвлеклись в теорию. А, на практике, view ЭстЪ, фунциклируют, и, если бы не этот злополучный case на 12-ке, этого топика и не возникло бы даже...
Так что, кроме как переписать запрос других идей - нЭт? Мо там EBF какой эту дыру затыкает?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35770630
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ex_Softс этим, как раз, еще хуже - select from SP в ASE тоже - нЭт

Скоро (в ASE 15.0.3) будут функции которые могут возврвщать select-ы(Table-valued UDFs). И их можно во from вставлять.
...
Рейтинг: 0 / 0
case во view
    #35770651
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den
в ASE 15.0.3

Ex_Soft
P.P.S.
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

весь это бутерброд - все сухо...

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35770660
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ex_Soft
cherrex_Den
в ASE 15.0.3

Ex_Soft
P.P.S.
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

весь это бутерброд - все сухо...

_________________
"Helo, word!" - 17 errors 56 warnings


ДА! Не доглядел!
...
Рейтинг: 0 / 0
case во view
    #35770668
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den , не занимайтесь оверквотингом
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35770683
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BTW, Мартин Грабер. SQL
Запросы SQL могут быть довольно сложными, поэтому представления являются исключительно гибким и мощным инструментом для работы с данными. Они могут облегчить вашу жизнь за счет переформатирования данных и исключения повторяющейся работы.

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35771079
Dmitry..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может выкинуть на% CASE и заменить на ifNull isNull ?
и пользовать синтаксис транзакта ( вместо || поставить + )
--
ЗЫ:можно ли это повторить на более простой табличке и вьюхах.
--
ЗЗЫ: NULL + value = NULL
...
Рейтинг: 0 / 0
case во view
    #35771737
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry..
заменить на ifNull

ASE такой функции не знает
Dmitry..
isNull

refman1.pdf
isnull
Описание Возвращает значение выражения2, если значение выражения1 равно NULL.

так что я как-то с трудом представляю как можно
Dmitry..
может выкинуть CASE и заменить

Dmitry..
можно ли это повторить на более простой табличке и вьюхах.

да вот наращиваю - пока дрозофилы получить не удалось...
Dmitry..
NULL + value = NULL

Не всегда (/me думает: напоминает "...в военное время значение синуса может достигать 4-х..."
)
Код: plaintext
\ndeclare\n   @a varchar( 256 ),\n   @b varchar( 256 ),\n   @c varchar( 256 )\n\nset @a=null\nset @b=\'@b\'\nset @c=@a+@b\n\nselect @c\n
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35772039
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft - ну перепишите вы вьювер, заменив в нем ссылку на вьювера на запросы :) Не будет решения другого, я сам в ASA на это напоролся года 4 назад и с тех пор иерархией вьюверов увлекаться перестал ;)

P.S. Жалко конечно, что в ASE так много ограничений. Но чтоб не было вычисляемых полей - даже как то странно.
...
Рейтинг: 0 / 0
case во view
    #35773701
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS пишет:

> Ex_Soft - ну перепишите вы вьювер, заменив в нем ссылку на вьювера на
> запросы :) Не будет решения другого, я сам в ASA на это напоролся года 4
> назад и с тех пор иерархией вьюверов увлекаться перестал ;)

У нас иерархии VIEW более-менее работают. Но они, ест., несложные.
Ни формул, ни вычислений, там нет. Только JOIN-ы таблиц и выводы полей.

Проблемы если и есть, то только с оптимизатором.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35773781
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/me думает: ну что мне сказать вам, други?.. Еще 20.01.2009 17:55 все было плохо. А вот 22.01.2009 те же запросы, на тех же данных - отработали. Я, конечно, понимаю - чудес не бывает. Но в результате допроса с пристрастием 3-й степени запугивания
выяснилось, что никто ничего не делал ни с сервером, ни с DDL, ни с данными. Так, что оставил, пока, так как ЭстЪ. Понаблюдаем...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
case во view
    #35891681
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o525 Ж8-/
БД переносится посредством b/r c
select @@version
Adaptive Server Enterprise/12.5.3/EBF 13331 ESD#7/P/NT (IX86)/OS 4.0/ase1253/1951/32-bit/OPT/Fri Mar 24 02:17:56 2006

на
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

В таком
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select
     AR.ACTIVITY_REPORT_NUMBER,
     AR.ACTIVITY_REPORT_DATE,
     /* vA.AGENT_NAME, */
     vRF.CLIENT_NAME_G,
     vRF.DOC_TYPE_NAME as DOC_TYPE_NAME1,
     vRF.DOC_FULL as DOC_FULL1,
     vRF.DOC_DELIVERY_DATE as DOC_DELIVERY_DATE1
   from
     ACTIVITY_REPORTS AR
     /* join v_AGENTS vA on (vA.AGENT_ID=AR.ACTIVITY_REPORT_AGENT_ID) */
     join v_RELATIONS_FULL vRF on (vRF.RELATION_ID=AR.SUBSCRIBER_RELATION_ID)
   where
     (AR.ACTIVITY_REPORT_ID= 314 )
     and (AR.RECORD_STATE= 100 )
     /* and (vA.RECORD_STATE=100) */
виде все возвращает на обоих. Но стОит только раз'rem'ить - на втором DOC_TYPE_NAME1, DOC_FULL1, DOC_DELIVERY_DATE1 - NULL. Разница только в EBF 13331 ESD#7 и EBF 12875 ESD#4 соответственно. Но сдесь никакого намека не нашел. Мо в #5/#6 исправляли?.. Хотя... Сомневаюсь...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / case во view
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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