Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / case во view / 25 сообщений из 29, страница 1 из 2
11.12.2008, 16:25
    #35708693
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
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
11.12.2008, 16:28
    #35708705
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
Внутри первого вьювера DOC_TYPE_NAME тоже в таблице с алисом d находится или другой ?
...
Рейтинг: 0 / 0
11.12.2008, 16:28
    #35708707
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
P.S. vD.DOC_FULL тоже ж NULL
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11.12.2008, 16:34
    #35708722
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
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
11.12.2008, 18:16
    #35709096
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
Ex_Soft пишет:

> D.DOC_SERIES||(case

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

> D.DOC_SERIES||(case

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

Гм... А я всегда и везде его юзаю... Даже в дядьке Грабере он ЭстЪ...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11.12.2008, 22:53
    #35709473
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
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
11.12.2008, 23:53
    #35709538
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
Это все - хорошо... А по сути вопроса?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12.12.2008, 14:02
    #35710877
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
Ex_Soft
Это все - хорошо... А по сути вопроса?

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

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

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

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

Ну, дык, view, как раз, и создавались, чтобы в тысячи местах не писать одно и тоже. Сами по себе они, практически, пользы и применения не имеют. Просто брались common'овский, часто повторяемые join'ы и оформлялись в виде view. IMHO, я так понимаю, одно из основных предназначений view, как раз, в этом - воплотить в себе часто используемые запросы/части запросов.
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.01.2009, 15:06
    #35769576
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
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
21.01.2009, 19:35
    #35770417
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
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
21.01.2009, 22:27
    #35770630
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
Ex_Softс этим, как раз, еще хуже - select from SP в ASE тоже - нЭт

Скоро (в ASE 15.0.3) будут функции которые могут возврвщать select-ы(Table-valued UDFs). И их можно во from вставлять.
...
Рейтинг: 0 / 0
21.01.2009, 22:46
    #35770651
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
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
21.01.2009, 22:58
    #35770660
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
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
21.01.2009, 23:09
    #35770668
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
cherrex_Den , не занимайтесь оверквотингом
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.01.2009, 23:30
    #35770683
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
BTW, Мартин Грабер. SQL
Запросы SQL могут быть довольно сложными, поэтому представления являются исключительно гибким и мощным инструментом для работы с данными. Они могут облегчить вашу жизнь за счет переформатирования данных и исключения повторяющейся работы.

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.01.2009, 09:53
    #35771079
Dmitry..
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
может выкинуть на% CASE и заменить на ifNull isNull ?
и пользовать синтаксис транзакта ( вместо || поставить + )
--
ЗЫ:можно ли это повторить на более простой табличке и вьюхах.
--
ЗЗЫ: NULL + value = NULL
...
Рейтинг: 0 / 0
22.01.2009, 13:42
    #35771737
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
case во view
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
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / case во view / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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