|
|
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Появилась необходимость разработать приложение для учета финансовых потоков. Сейчас пользователи все ведут в Excel. Собственно вопрос вот в чем, какую СУБД выбрать для проекта. Планируется 20 таблиц, в таблицы (их около 4) документов будет поступать в среднем по 1000 записей в день. Юзеры будут работать через вэб-интерфейс (тончайший клиент, так как у некоторых только диалап). По такой схеме: Модем-брандмауэр-Сервер FreeBSD (прокси) - проборос на сервер с Win2к3. Планируется только ХП абсолютно на все действия юзера. В локалке будет 7-8 юзеров. Филиалов порядка 50. Клиент или на PHP или Java (поднят апач c TomCat на сервере FreeBSD). Хотелось бы реализовать на MSSQL 2000, так как его только и знаю. Но все же может, есть нечто другое для данной задачи. Выскажите свои мнения по этому поводу. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 15:44 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Если знаете MS SQL 2k, и он есть -- так от добра добра не ищут. Очевидно, нагрузки экселя он потянет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 17:10 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Это точно, потянет, вобщем при таких нагрузках любой сервер подойдет. Я вы точно уверенны, что у филиалов всегда будет связь? К томуже сверх тонкий клиент это не браузер! Хотя ответ несколько не по теме, но всеже посоветую. У меня например за несколько лет эксперементов появился пожходящий кандидат. Asta IO - для создания AppServer. С ним можно очень экономно использовать трафик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 18:04 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель МаоПоявилась необходимость разработать приложение для учета финансовых потоков...По такой схеме: Модем-брандмауэр-Сервер FreeBSD (прокси) - проборос на сервер с Win2к3. Планируется только ХП абсолютно на все действия юзера... Делал подобное на VFP + Web Services , доступ филиалов через Интернет к серверу W2K (на котором и были Web Services)... Клиенты достукивались до местного ISP... Проблем не было... Вместо MS SQL 2000 лучше использовать MS SQL Server 2005 - Ваше приложение может работать через TCP/IP непосредственно с сервером или на его основе сделать Web Services, но тогда будет все работать медленнее... Клиентов я бы написал на том, что лучше знаю - VFP (если в филиалах старые машины) или VB.NET (если все быстрые) - все потянет Вашу задачу без проблем... Good luck! Интересная и простая задача! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2006, 20:09 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
А что может попробывать Oracle XE или Sybase ASA? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 11:11 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Sergey Ch Председатель МаоПоявилась необходимость разработать приложение для учета финансовых потоков...По такой схеме: Модем-брандмауэр-Сервер FreeBSD (прокси) - проборос на сервер с Win2к3. Планируется только ХП абсолютно на все действия юзера... Делал подобное на VFP + Web Services , доступ филиалов через Интернет к серверу W2K (на котором и были Web Services)... Клиенты достукивались до местного ISP... Проблем не было... Вместо MS SQL 2000 лучше использовать MS SQL Server 2005 - Ваше приложение может работать через TCP/IP непосредственно с сервером или на его основе сделать Web Services, но тогда будет все работать медленнее... Клиентов я бы написал на том, что лучше знаю - VFP (если в филиалах старые машины) или VB.NET (если все быстрые) - все потянет Вашу задачу без проблем... Good luck! Интересная и простая задача! Этот VFP что из себя представляет. Слышал что он есть и вроде как его MS собираются сворачивать или это просто слух какой-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 10:56 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель МаоА что может попробывать Oracle XE или Sybase ASA? только Оракл в полной комплектации, ASA - барахло, не потянет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 11:28 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Рыжий Кот Председатель МаоА что может попробывать Oracle XE или Sybase ASA? только Оракл в полной комплектации, ASA - барахло, не потянет Я слышал, что ASA очень гибкая, нетребовательная к ресурсам СУБД с кучей фич и держит неплохие объемы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 11:41 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао Рыжий Кот Председатель МаоА что может попробывать Oracle XE или Sybase ASA? только Оракл в полной комплектации, ASA - барахло, не потянет Я слышал, что ASA очень гибкая, нетребовательная к ресурсам СУБД с кучей фич и держит неплохие объемы вас жестоко обманули ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 13:39 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Ну судя по высказываниям некого ASCRUS, то в принципе это очень даже ничего. А что у Вас был печальный опыт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 13:44 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель МаоНу судя по высказываниям некого ASCRUS, то в принципе это очень даже ничего. А что у Вас был печальный опыт? нет у мну все в порядке, но вы же знаете что здесь в состязании Oracle vs smthelse как правило побеждает первый ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 14:12 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
И не факт он очень громоздкий и тяжелый в администрировании. На том же MS все делается приятнее и легче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 14:15 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель МаоЮзеры будут работать через вэб-интерфейс (тончайший клиент, так как у некоторых только диалап). Веб-интерфейс и нетребовательность к траффику - противоречащие друг другу условия. Председатель МаоХотелось бы реализовать на MSSQL 2000, так как его только и знаю. Правильно. Председатель МаоНо все же может, есть нечто другое для данной задачи. Есть. Сколько угодно. Но делайте на том, что знаете. Председатель МаоИ не факт он очень громоздкий и тяжелый в администрировании. На том же MS все делается приятнее и легче. Ха-ха-ха. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 18:16 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer Председатель МаоЮзеры будут работать через вэб-интерфейс (тончайший клиент, так как у некоторых только диалап). Веб-интерфейс и нетребовательность к траффику - противоречащие друг другу условия. XML+XSLT, и они уже не такие и противоречащие,) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 18:28 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer Ха-ха-ха. смех без причины, признак ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 19:41 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
2 softwarer Вы лично чем пользуетесь в оракле для написания запросов и ХП и их отладки? Вот например QA в MS очень простая и удобная штука. Что предлагает оракл пользователю подобное? Да я согласен, что для больших объемов, например очень крупные хранилища или системы принятия решений, оракл необходим, а для средних задач 90 проц. , он просто не нужен. Очень неуклюж, громоздок, он разработан для высококлассных специалистов, а для среднего класса в освоении его MS его за пояс заткнет. С точки зрения стоимости владения MS дешевле будет (лицензия дешевле+ специалист в принципе дешевле+ неглупый новичок быстро разберется), на тот же оракл нужны годы, и рядом классный наставник. Вы же ставите дома не Sun Solaris, вероятно у вас дома стоит WinXP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 19:44 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Все таки хотелось бы услышать от кого-нибудь, кто реально пострадал от использования Sybase ASA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 19:46 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
И отчего люди так Оракла боятся? Конкркетно, что сложного в администрировании? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 23:57 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ИзопропилИ отчего люди так Оракла боятся? Конкркетно, что сложного в администрировании? Это миф, бережно поддерживаемый конкурентами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 01:48 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Anton Demidov ИзопропилИ отчего люди так Оракла боятся? Конкркетно, что сложного в администрировании? Это миф, бережно поддерживаемый конкурентами. ... и плюс 8 томов "Справочник администратора Оракла"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 02:08 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао2 softwarer Вы лично чем пользуетесь в оракле для написания запросов и ХП и их отладки? Вот например QA в MS очень простая и удобная штука. Что предлагает оракл пользователю подобное? TOAD Видели ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 09:40 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Председатель Мао2 softwarer Вы лично чем пользуетесь в оракле для написания запросов и ХП и их отладки? Вот например QA в MS очень простая и удобная штука. Что предлагает оракл пользователю подобное? TOAD Видели ? А оно стандартную поставку Оракла входит? (я правда не знаю) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 10:10 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuper Gluk (Kazan) Председатель Мао2 softwarer Вы лично чем пользуетесь в оракле для написания запросов и ХП и их отладки? Вот например QA в MS очень простая и удобная штука. Что предлагает оракл пользователю подобное? TOAD Видели ? А оно стандартную поставку Оракла входит? (я правда не знаю) Вам шашечки или ехать ? Из бесплатных есть TORA Что касается QA, да неплохой, вот Managment Studiо от 2005 разочаровало и тормозит сильнее чем Oracle DBA Studio на той-же машине :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 10:57 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
я имел не только средства разработки, а и сложность в администрировании. Согласитесь без позиции Oracle DBA инф. система жить не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 11:25 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), ну всё-таки для стороннего человека надо знать что именно TORA надо ставить, где-то его надо скачивать, всё-таки когда оно есть сразу, то несколько проще. А насчет QA и Managment Studiо от 2005 - мнение противоположное. Мне QA жутко не нравился. У меня Managment Studiо от 2005 не тормозит, правда и машина новая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 11:38 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
мда =) уже обсуждаюца даж не какой сервер лучше, а (sic!) какая приблуда к серверу удобнее =))) кста, для оракла имхо плскл девелопер получше будет чем тоад... меня 7я версия оченно радует. после 6 - работать удобнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:46 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Даже если сравнивать MS и Oracle, то скорость освоения TSQL выше чем PLSQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:58 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель МаоДаже если сравнивать MS и Oracle, то скорость освоения TSQL выше чем PLSQL зависит от глубины освоения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:05 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
в TSQL как-то интуитивно все понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:09 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель МаоДаже если сравнивать MS и Oracle, то скорость освоения TSQL выше чем PLSQL Не надо грязи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:09 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Маов TSQL как-то интуитивно все понятно угу, в школе мне тоже казалось, что в qbasic как-то интуитивно все понятно, а в паскале даже goto непонятно как сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:11 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Председатель МаоДаже если сравнивать MS и Oracle, то скорость освоения TSQL выше чем PLSQL Не надо грязи Проведите эксперимент. Возьмите двух равноценных студентов техн. вузов расскажите им основы РСУБД и дайте одному руков. по TSQL, а другому по PL SQL. Дайте установочный компакт по оракл 9 и мс 2000. Поставьте им задачу, например какой нибудь кадровый учет. И посмотрите кто из них быстрее справится. У того кого оракл, уже будет испытывать трудности с установкой и настройкой коннектов к серверу. Посмотрите сколько вопросов в профильном форуме оракла "Не могу подсоединится к серверу SOS". И посмотрите насколько меньше таких проблем у мс. С этим вы точно спорить не будете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:27 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Маов TSQL как-то интуитивно все понятно особенно рекомендация ставить ; перед WITH в CTE бедолага перегруженный WITH разобрать не может видать интуиции не хватает. А серьёзно - список языковых косяков TSQL займёт не одну страницу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:29 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао Проведите эксперимент. Возьмите двух равноценных студентов техн. вузов расскажите им основы РСУБД и дайте одному руков. по TSQL, а другому по PL SQL. Дайте установочный компакт по оракл 9 и мс 2000. Поставьте им задачу, например какой нибудь кадровый учет. И посмотрите кто из них быстрее справится. У того кого оракл, уже будет испытывать трудности с установкой и настройкой коннектов к серверу. Посмотрите сколько вопросов в профильном форуме оракла "Не могу подсоединится к серверу SOS". И посмотрите насколько меньше таких проблем у мс. С этим вы точно спорить не будете. А что будет при увеличении сложности задачи? Будем смотреть профильный форум с вопросами про нумерацию записей,постраничный вывод, нарастающие итоги, скользящее среднее,обход деревьев и тд ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:33 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао Gluk (Kazan) Председатель МаоДаже если сравнивать MS и Oracle, то скорость освоения TSQL выше чем PLSQL Не надо грязи Проведите эксперимент. Возьмите двух равноценных студентов техн. вузов расскажите им основы РСУБД и дайте одному руков. по TSQL, а другому по PL SQL. Дайте установочный компакт по оракл 9 и мс 2000. Поставьте им задачу, например какой нибудь кадровый учет. И посмотрите кто из них быстрее справится. У того кого оракл, уже будет испытывать трудности с установкой и настройкой коннектов к серверу. Посмотрите сколько вопросов в профильном форуме оракла "Не могу подсоединится к серверу SOS". И посмотрите насколько меньше таких проблем у мс. С этим вы точно спорить не будете. Эксперименты на студентах не показатель. При правильном и методичном обучении, еще не факт что "проще" усвоится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:36 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Эксперименты на студентах не показатель. При правильном и методичном обучении, еще не факт что "проще" усвоится думаю при правильном, студет по mssql повесится где-то между "как извратится без connect by prior" и "21 способ обойти жопу без exception" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:42 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!! Gluk (Kazan) Эксперименты на студентах не показатель. При правильном и методичном обучении, еще не факт что "проще" усвоится думаю при правильном, студет по mssql повесится где-то между "как извратится без connect by prior" и "21 способ обойти жопу без exception" Да или будет через жопу возвращать селект из хранимой процедуры в грид ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:47 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
2Председатель Мао попробуйте осознать одну вещь - pl/sql это язык вырсший из ады (кажется), T-SQL из mssql2k это просто процедурное расширение языка SQL, нет наймспеса (schema/package), нет эксепшенов, там масивов и прочих элементарных атрибутов языка ... но для студента - согласен, проще выучить пару конструкций и в перед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:50 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
интуитивно понятный connect by prior ну-ну или чтение страниц языковых косяков начинающими повеселило давайте вобще эту тему не продолжать, объективных аргументов всё равно не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:52 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
OS/360 Председатель Мао Проведите эксперимент. Возьмите двух равноценных студентов техн. вузов расскажите им основы РСУБД и дайте одному руков. по TSQL, а другому по PL SQL. Дайте установочный компакт по оракл 9 и мс 2000. Поставьте им задачу, например какой нибудь кадровый учет. И посмотрите кто из них быстрее справится. У того кого оракл, уже будет испытывать трудности с установкой и настройкой коннектов к серверу. Посмотрите сколько вопросов в профильном форуме оракла "Не могу подсоединится к серверу SOS". И посмотрите насколько меньше таких проблем у мс. С этим вы точно спорить не будете. А что будет при увеличении сложности задачи? Будем смотреть профильный форум с вопросами про нумерацию записей,постраничный вывод, нарастающие итоги, скользящее среднее,обход деревьев и тд ? что сложного в нарастающих итогах или скользящем среднем, ну нет у мс такой встроенной фичи, зато можно обойтись другими средствами, разработав правильный алгоритм. Про деревья много раз обсуждалось уже. Давайте с азов начнем- есть новичок хочет освоить оракл и не может элементарно его установить и что самое плачевное его снести с винды, заманаетесь чистить реестр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:54 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!!2Председатель Мао попробуйте осознать одну вещь - pl/sql это язык вырсший из ады (кажется), T-SQL из mssql2k это просто процедурное расширение языка SQL, нет наймспеса (schema/package), нет эксепшенов, там масивов и прочих элементарных атрибутов языка ... но для студента - согласен, проще выучить пару конструкций и в перед. у того же оракла нет темповых таблиц, ими не нужно злоупотреблять, но при небольших объемах и сложных расчетов без них туго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:58 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Привет, Yo.!!! Ты пишешь: Yo.!!Y> попробуйте осознать одну вещь - pl/sql это язык вырсший из ады (кажется) йоу по-прежнему в наркотической нирване... буковки PL, несомненно, указывают на родство с Адой... -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 16:59 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
авторзато можно обойтись другими средствами, разработав правильный алгоритм конечно можно. и поехали велосипеды(правильные алгоритмы) разрабатывать. В соседнем топике грят, что на МУМПС всё можно сделать и вааще никакой SQL не нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:01 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuperинтуитивно понятный connect by prior ну-ну или чтение страниц языковых косяков начинающими повеселило давайте вобще эту тему не продолжать, объективных аргументов всё равно не будет А может действительно будет, просто всегда сравниваем серверы. А здесь сравнение комфорта и удобства разработки и сопровождения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:01 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао у того же оракла нет темповых таблиц, ими не нужно злоупотреблять, но при небольших объемах и сложных расчетов без них туго. угу, это тоже должно быть в курсе по mssql, временные таблицы или почему код написаный студентами через какое-то время валит всю систему :) ЗЫ. у меня сейчас в ветке mssql такие 5 верхних тем: Server 2000 + Excel 2003: периодические таймауты Помогите с SQL запросом (ФИО в Ф И.О.)? MSSQL 2000: Как сопоставить строки таблиц inserted и deleted? Как несколько строк обьединить в одну ? Немогу законектится к MSSQL 2000 не дай бог такое начнется в ветке оракла .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:05 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао А может действительно будет, просто всегда сравниваем серверы. А здесь сравнение комфорта и удобства разработки и сопровождения. Если комфорт сравнивать - может, а вот скорость освоения - врядли :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:06 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
OS/360 авторзато можно обойтись другими средствами, разработав правильный алгоритм конечно можно. и поехали велосипеды(правильные алгоритмы) разрабатывать. В соседнем топике грят, что на МУМПС всё можно сделать и вааще никакой SQL не нужен Что делает новичок, когда отвалился коннект у юзера к ораклу. Какой-нибудь tnslistner заглючил. Все приехали он элементарно не сможет этого сделать. Либо же просто упал сервак лежит база, и туева куча ORA-..... он не сможет его поднять. А вот у мс с этим проще, можнон неподготовленнго юзера по телефону научить и рассказать. Поэтому все первичней ИМХО простата разруливания авралов, а не встроенность возможности делать нарастающие итоги. Эти алгоритмы есть здесь же на профильном форуме mc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:07 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!! ЗЫ. у меня сейчас в ветке mssql такие 5 верхних тем: Server 2000 + Excel 2003: периодические таймауты Помогите с SQL запросом (ФИО в Ф И.О.)? MSSQL 2000: Как сопоставить строки таблиц inserted и deleted? Как несколько строк обьединить в одну ? Немогу законектится к MSSQL 2000 не дай бог такое начнется в ветке оракла .... Дык это те студенты Мао уже освоили MSSQL, а Оракл еще не могут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:08 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий йоу по-прежнему в наркотической нирване... буковки PL, несомненно, указывают на родство с Адой... определять родство по буковкам в названии мог тока ходящий PL/SQL is Oracle's procedural language extension to the SQL language. It was first released in 1991 with the "Procedural" add-on Option in Oracle v6. Oracle PL/SQL has its origins in ADA, a high-level computer programming language developed for the US Department of Defense in 1979. Ada was designed to emphasize reliability, data abstraction, information hiding, and other key elements of modern systems design. http://orafaq.com/node/54 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:12 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!! Председатель Мао у того же оракла нет темповых таблиц, ими не нужно злоупотреблять, но при небольших объемах и сложных расчетов без них туго. угу, это тоже должно быть в курсе по mssql, временные таблицы или почему код написаный студентами через какое-то время валит всю систему :) ЗЫ. у меня сейчас в ветке mssql такие 5 верхних тем: Server 2000 + Excel 2003: периодические таймауты Помогите с SQL запросом (ФИО в Ф И.О.)? MSSQL 2000: Как сопоставить строки таблиц inserted и deleted? Как несколько строк обьединить в одну ? Немогу законектится к MSSQL 2000 не дай бог такое начнется в ветке оракла .... Это скорее просто еще новички, и им даже понятие ODBC не знакомы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:15 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао Это скорее просто еще новички, и им даже понятие ODBC не знакомы. но это им не мешает лабать код ... и мне отрадно, что они это делают на МС платформе :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:26 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!! Председатель Мао Это скорее просто еще новички, и им даже понятие ODBC не знакомы. но это им не мешает лабать код ... и мне отрадно, что они это делают на МС платформе :) А почему у Вас такое отвращение к MS? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:27 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Привет, Yo.!!! Ты пишешь: Yo.!!Y> http://orafaq.com/node/54по-прежнему, читаем надписи на заборах? ню-ню... а ведь бредни эти начались с кем-то невинно обронённой фразы: "its syntax strongly resembles that of the Ada programming language..." для начала, неплохо бы взглянуть на то, как в ADA работают с классами, структурами, генериками и пр. -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:36 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель МаоДа или будет через жопу возвращать селект из хранимой процедуры в грид В чём состоит "ЖОПА", при возвращении select-a из ХП в грид ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:37 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель МаоКакой-нибудь tnslistner заглючил. Все приехали он элементарно не сможет этого сделать. смотрим профильный форум http://www.sql.ru/forum/actualtopics.aspx?search=tcp+developer&bid=1 ужос нах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:38 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Andreww Председатель МаоДа или будет через жопу возвращать селект из хранимой процедуры в грид В чём состоит "ЖОПА", при возвращении select-a из ХП в грид ? тем что вы не можете сделать такое Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:46 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
OS/360 Председатель МаоКакой-нибудь tnslistner заглючил. Все приехали он элементарно не сможет этого сделать. смотрим профильный форум http://www.sql.ru/forum/actualtopics.aspx?search=tcp+developer&bid=1 ужос нах Если вы почитаете, то все проблемы от непонимания как ms sql работает через 1433 порт. Как видите не решенных проблем мало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 17:51 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий для начала, неплохо бы взглянуть на то, как в ADA работают с классами, структурами, генериками и пр. мне ткнуть носом в Кайта или пойдешь мимо молча ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 18:03 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао тем что вы не можете сделать такое .... Вот это : create or replace function get_obj return sys_refcursor is res sys_refcursor; begin open res for select * from user_objects; return res; end; Не ровно то же самое ? Или речь идёт о том как вызвать эту функцию и посмотреть её результат в каком-то инструменте разработчика вроде TOAD или PL\SQL Developer ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 18:05 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Привет, Yo.!!! Ты пишешь: Yo.!!Y> мне ткнуть носом в Кайта или пойдешь мимо молча ?ты уже изучил АДА ? -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 18:05 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Andreww Председатель Мао тем что вы не можете сделать такое .... Вот это : create or replace function get_obj return sys_refcursor is res sys_refcursor; begin open res for select * from user_objects; return res; end; Не ровно то же самое ? Или речь идёт о том как вызвать эту функцию и посмотреть её результат в каком-то инструменте разработчика вроде TOAD или PL\SQL Developer ? Вы используете курсор. Как вам увидеть что это функция вернула в табличном виде, чтобы проанализировать корректен ли результат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 18:07 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий ты уже изучил АДА ? ты смешон. Председатель Мао Вы используете курсор. Как вам увидеть что это функция вернула в табличном виде, чтобы проанализировать корректен ли результат select get_obj from dual ; :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 18:18 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Привет, Yo.!!! Ты пишешь: Yo.!! Мимопроходящийты уже изучил АДА ? Y> ты смешон. аргументы, надо полагать, закончились... -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 18:26 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
2 Председатель Мао Председатель МаоКак вам увидеть что это функция вернула в табличном виде Yo.!! select get_obj from dual Ну да. Видно табличку прекрасно (по крайней мере в PL\SQL Developer-e) Я просто, думаю что у пред. Мао вопрос не об этом, вопрос про какую-то "ЖОПУ", пытаюсь её увидеть :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 18:31 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Andreww, а в Оракле в функции можно побочный эффект сделать? т.е. сделать изменения в каких-то таблицах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 18:46 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий аргументы, надо полагать, закончились... т.е. мое знание/незнание ады может повлиять на историю :) ? ходящий, ты всегда вызывал восхищение - такие глубокие мысли в столь скудном умишке ! Oracle® Database PL/SQL User's Guide and ReferenceThis appendix discusses the program limits that are imposed by the PL/SQL language. PL/SQL is based on the programming language Ada. As a result, PL/SQL uses a variant of Descriptive Intermediate Attributed Notation for Ada (DIANA), a tree-structured intermediate language. It is defined using a meta-notation called Interface Definition Language (IDL). DIANA is used internally by compilers and other tools. At compile time, PL/SQL source code is translated into machine-readable m-code. Both the DIANA and m-code for a procedure or package are stored in the database. At run time, they are loaded into the shared memory pool. The DIANA is used to compile dependent procedures; the m-code is simply executed. http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14261/limits.htm#LNPLS018 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 18:49 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuper а в Оракле в функции можно побочный эффект сделать? т.е. сделать изменения в каких-то таблицах Конечно. А В MSSQL-e разве нет ? Где же тут "ЖОПА"-то ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 19:10 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Привет, Yo.!!! Ты пишешь: Yo.!!Y> This appendix discusses the program limits that are imposed by the PL/SQL language. Y> PL/SQL is based on the programming language Ada. от же ж упёртый тЭорэтик попался... вот тебе простенький пример на ADA, специально без использования асинхронных процессов . приведи его к PL/SQL, так чтоб Оракл это схавал и не поперхнулся. потом сравни отличия. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 19:18 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий вот тебе простенький пример на ADA, специально без использования асинхронных процессов . приведи его к PL/SQL, так чтоб Оракл это схавал и не поперхнулся. я ж тебе советовал ходить молча, него теперь кудахтоть то ? не нету в pl/sql generic, и tasking нету и чо ? теперь pl/sql не в DIANA будет компилися ? я уже говорил что ты смешон ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 19:29 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Привет, Yo.!!! Ты пишешь: Yo.!!Y> не нету в pl/sql generic, и tasking нету и чо ? я тебе это с самого начала говорил. в ADA это базис, он там с рождения. после этого, заявлять о том, что PL/SQL, основан на ADA, могут только узколобые маркетологи. Yo.!!Y> теперь pl/sql не в DIANA будет компилися ?йоу, ты когда цитируешь чего-й-то, то хотя бы читай, что там понаписано. "...в DIANA будет компилиться..." ты даже не понял, что есть DIANA... -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 19:42 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао AndrewwВ чём состоит "ЖОПА", при возвращении select-a из ХП в грид ? тем что вы не можете сделать такое Код: plaintext 1. 2. 3. 4. 5. 6. Дык это просто здорово, что вместо этой хрени можно сделать нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 19:48 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuperAndreww, а в Оракле в функции можно побочный эффект сделать? т.е. сделать изменения в каких-то таблицах Можно. В том числе в функции, вызываемой из select-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 19:49 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий я тебе это с самого начала говорил. в ADA это базис, он там с рождения. после этого, заявлять о том, что PL/SQL, основан на ADA, могут только узколобые маркетологи. боюсь что маркетологом еще далеко до тебя, утверждать, что нет родства с адой когда производитель об этом родстве говорит прямо в документации и ниосилить 2 строчки на инглише это круто. я снова восхищен :) Мимопроходящий йоу, ты когда цитируешь чего-й-то, то хотя бы читай, что там понаписано. "...в DIANA будет компилиться..." ты даже не понял, что есть DIANA... ходящий, нельзя быть настолько тупым! откою страшную тайну ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 20:27 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer Председатель Мао Код: plaintext 1. 2. 3. 4. 5. 6. Дык это просто здорово, что вместо этой хрени можно сделать нормально."Нормально" - это как ? Типа этой хрени ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 20:52 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChA"Нормально" - это как "Нормально" - это возвращать сколько угодно выборок каждую через свой именованный out параметр, а не в виде одной кучи, индексы в которой слетают от каждого чиха. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 20:54 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChAИли что-то другое ? Я бы делал примерно так: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 21:14 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Маотем что вы не можете сделать такое create Procedure p_ec_pays( @id int) Кстати, не покажете ли, как Вы сделаете такое: Код: 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. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 21:54 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer ChA"Нормально" - это как "Нормально" - это возвращать сколько угодно выборок каждую через свой именованный out параметр, а не в виде одной кучи, индексы в которой слетают от каждого чиха. про кучу - понятно, индексы то причём? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 21:59 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
OS/360про кучу - понятно, индексы то причём? Ээ... "индексы" - не в смысле "объекты БД", а в смысле "порядковый номер в массиве возвращаемых рекордсетов". Это в сторону команды set nocount on, если мне не изменяет память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 22:02 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer Это в сторону команды set nocount on, если мне не изменяет память. Глюки с NOCOUNT - это тоже один из любимейших вопросов на профильном форуме. До кучи - скалярные OUTPUT параметры можно получить только выбрав предварительно табличные результаты. TDS так устроен. Tabulated Data Stearm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 22:11 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Di_LIne Anton Demidov ИзопропилИ отчего люди так Оракла боятся? Конкркетно, что сложного в администрировании? Это миф, бережно поддерживаемый конкурентами. ... и плюс 8 томов "Справочник администратора Оракла"...Вот про это я и говорю - где вы видели эти 8 томов? Сделайте поиск на том же Озоне, в конце концов. Прежде чем судить о сложности администрирования, поставьте себе Oracle XE, посмотрите на его web интерфейс - многие заблуждения развеются как дым. Для полноценных версий есть курс "2 Day DBA" - это вполне по силам каждому заинтересованному. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 23:06 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Советую реализовывать на том, что знаешь, и думать в первую очередь о проектировании модели данных, идеологии написании ХП, репликации (если 50 филиалов). А имея 3-х летний опыт писанины АИС на базе СУБД Oracle, скажу, что при реализация финансового учёта каких-то специфичных, с точки зрения технологии, проблем не возникало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 01:06 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer"Нормально" - это возвращать сколько угодно выборок каждую через свой именованный out параметр, а не в виде одной кучиДопустим. Но этот механизм будет работать только через OCI, но не через ODBC, разве не так ? softwarerиндексы в которой слетают от каждого чиха.Простуда здесь не при чем, результаты возвращаются по мере их выдачи сервером. Возврат значений счетчика обработанных записей последней командой тоже входит в их число, что действительно становится проблемой для новичков, особенно, когда они начинают работать с множественными результатами, не умея этого делать правильно. На практике NOCOUNT, как правило, устанавливается в ON, так как возвращаемое значение просто не нужно, тем более, что получить его можно и другими способами. Более того, оно просто вредно, так как посылается практически после каждого выполняемого оператора DML, забивая сеть ненужными пакетами. Лично я склонен считать эту возможность анахронизмом, наследием Sybase, хотя, в исключительно редких случаях, и полезным при отладке скрипта в QA, так как просто лень писать Код: plaintext * В принципе, наверное, действительно можно считать недостатком, что протокол TDS поддерживает только синхронную передачу данных - "вопрос - ответ". Но если правильно помню, то стандарт ODBC не поддерживает асинхронной передачи данных, так что все в рамках стандартов :) ** Хотя в 2005 и была введена какая-то поддержка такой возможности(MARS), но, по отзывам, как то не очень убедительно, не говоря уж о практической пользе, которая мне, например, вообще неочевидна. Тем более, что в Oracle, насколько понимаю, главное не множественные результаты, как таковые, но множество независимых и одновременно открытых курсоров. А это уже совсем другая цель и, естественно, механизм, протокол и, разумеется, свой native API. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 04:44 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChAДопустим. Но этот механизм будет работать только через OCI, но не через ODBC, разве не так ? Нет, не так. Точнее, я не имею личного опыта - не вижу никакого смысла использовать ODBC - но кого-то из спрашиваюших лично посылал в статью, где расписывалось, как использовать эту фичу через ODBC. ChAПростуда здесь не при чем, Простуда здесь вызвана тем фактом, что клиентский код начинает неоправданно зависеть от реализации серверного. ChAНо если правильно помню, то стандарт ODBC не поддерживает Тем хуже для него. Я не понимаю, какой смысл кивать на кривой и мертвый стандарт и гордиться наследованием его глупостей. Резюмируя: по сравнению с MSSQL, в Oracle для записи того же требуется одна лишняя строка (open for select вместо просто select). Этим мы покупаем именованные параметры-рекордсеты и возможность легко крутить выборки так, как нам удобно, в частности передавать их между подпрограммами и использовать на сервере. Собственно, как мы недавно установили, существует возможность взять на клиенте out-курсор, выданный одной ХП и передать его параметром на вход вызываемой с клиента другой ХП - конечно, это есть изврат, но показывает возможности механизма. Что касается второго из приведенных мной примеров, то подозреваю ответа на него я не дождусь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 08:00 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Andreww SergSuper а в Оракле в функции можно побочный эффект сделать? т.е. сделать изменения в каких-то таблицах Конечно. А В MSSQL-e разве нет ? Где же тут "ЖОПА"-то ? В MSSQL-e функция не может менять таблицы, можно делать модификации, только процедура. А что будет есть функция меняет таблицу и выдаёт данные из неё же? С передачей выборки через параметр в MSSQL-e действительно плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 09:56 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuperА что будет есть функция меняет таблицу и выдаёт данные из неё же? Если хотите простой ответ, то ничего не будет, в смысле выборка будет построена над снапшотом на момент запроса. Если сложный ответ - надо лезть в Oracle Concepts, читать про согласованное чтение. Например если на уровне read committed из запроса вызывается функция, которая в свою очередь делает запрос, то эти два запроса не будут взаимосогласованы (основной запрос изменений не увидит, запрос в функции увидит). Впрочем, на практике такие задачи (модифицировать читаемую таблицу) вряд ли встречаются. Побочный эффект функций применяется для более мягких вещей, например для аудита (залогировать, кто и когда запрашивал вот такую строку данных). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 10:12 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer , спасибо, понял а что имелось в виду softwarerЧто касается второго из приведенных мной примеров, то подозреваю ответа на него я не дождусь :) Я чесно говоря не понял что там делается. Динамический запрос или еще что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 10:17 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuperЯ чесно говоря не понял что там делается. Динамический запрос или еще что? Динамический запрос, но с одной важной деталью: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 10:35 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
В 2000 такого не сделать, а в 2005 по-моему можно - есть возможность задать от имени кого выполнится запрос (проветить не могу, есть только хелп к 2005) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 10:53 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Привет, Yo.!!! Ты пишешь: Yo.!! Мимопроходящиййоу, ты когда цитируешь чего-й-то, то хотя бы читай, что там понаписано. "...в DIANA будет компилиться..." ты даже не понял, что есть DIANA...Y> откою страшную тайну ...и снова надпИси на заборах... йоу, ты всё ж таки разберись, что есть DIANA. -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 11:42 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
2 softwarer а теперь представьте что ваше безобидная лишняя строчка open по свой сути применяет иной механизм выборки данных. То есть обычный селект будет намного быстрее работать, чем перебор строчек. А когда большой объем выборки, оракл скажет кря? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 12:18 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао2 softwarer а теперь представьте что ваше безобидная лишняя строчка open по свой сути применяет иной механизм выборки данных. То есть обычный селект будет намного быстрее работать, чем перебор строчек. А когда большой объем выборки, оракл скажет кря? Не факт, это только домыслы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 12:23 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuper Председатель Мао2 softwarer а теперь представьте что ваше безобидная лишняя строчка open по свой сути применяет иной механизм выборки данных. То есть обычный селект будет намного быстрее работать, чем перебор строчек. А когда большой объем выборки, оракл скажет кря? Не факт, это только домыслы Так может давайте проверим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 12:26 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
кстати вот пример недостатка оракловского null в строках по сравнению с ансишным вот это выражение Код: plaintext 1. Код: plaintext однако скорее всего щас мне предложат на это тыщу достоинств :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 12:35 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао SergSuper Председатель Мао2 softwarer а теперь представьте что ваше безобидная лишняя строчка open по свой сути применяет иной механизм выборки данных. То есть обычный селект будет намного быстрее работать, чем перебор строчек. А когда большой объем выборки, оракл скажет кря? Не факт, это только домыслы Так может давайте проверим? А что проверять? И там и там процедуры выплёвывают данные клиенту. Почему должна быть разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 12:37 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuperкстати вот пример недостатка оракловского null в строках по сравнению с ансишным вот это выражение Код: plaintext 1. Код: plaintext однако скорее всего щас мне предложат на это тыщу достоинств :) а что в оракле нет isnull()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 12:37 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
2SergSuper непонял что за лажа с isnull (NVL по оракловаму) ? ты конкатинируешь строки, а речь вроде про SQL запрос идет ... ЗЫ. про NULL='' нужно еще раз ? в прошлый раз не хватило :) ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 12:45 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!!2SergSuper непонял что за лажа с isnull (NVL по оракловаму) ? ты конкатинируешь строки, а речь вроде про SQL запрос идет ... ЗЫ. про NULL='' нужно еще раз ? в прошлый раз не хватило :) ?? Речь о том, что строка1="select ....."; строка2=isnull('and'+filter, ' '); строка=строка1+строка2; то есть в мс можно обойтись сразу без консрукции кєйс вен зен енд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 12:51 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао Речь о том, что строка1="select ....."; строка2=isnull('and'+filter, ' '); строка=строка1+строка2; то есть в мс можно обойтись сразу без консрукции кєйс вен зен енд давай ты сначала разберешься, что такое строка и чем строка charов отличается от SQL запроса ;) ЗЫ. постав NVL вместо isnull получишь тот же результат в оракле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 13:08 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yoдавай ты сначала разберешься, что такое строка и чем строка charов отличается от SQL запроса ;) мы сейчас ведем речь о построении динамической строки SQL запроса, при чем здесь char я так понял NVL аналог isnull? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 13:15 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Маоа теперь представьте Уважаемый, Вы пожалуйста сначала покажите свое решение, потом будем разбираться с другими Вашими... веселыми представлениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 13:27 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuperкстати вот пример недостатка оракловского null в строках по сравнению с ансишным Да нет недостатка, просто я расписал этот фрагмент так, чтобы неоракловцы точно поняли, что имеется в виду. Реально там следовало бы использовать функцию nvl2 и результат был бы таким же, как у Вас. Впрочем, это как раз наиболее неудачная особенность null-ов. Почему неудачная - приведу пример: Код: plaintext В этом случае, если из-за ошибки программиста coeff окажется null-ом, данные просто молча погибнут. Я бы предпочел, чтобы такая ситуация трактовалась как ошибка (возбуждала исключение). Вы в своем примере удачно используете эту особенность, но имхо редкое удобство неадекватно потенциальным минусам. Yo.!! Мне кажется, кто-то из нас двоих тормозит, и мне кажется, это не я. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 13:38 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer Мне кажется, кто-то из нас двоих тормозит, и мне кажется, это не я. да, стормозил, мне показалось, что в начале был sql. а не динамический. ЗЫ. а зачем nvl2, imho nvl вполне хватает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 13:47 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!! imho nvl вполне хватает ? Решение с nvl, которое я вижу, нравится мне меньше, чем использование nvl2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 13:51 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Маоа что в оракле нет isnull()? Cкорее всего нет. Нафиг ему плохо названная нестандартная функция? В стандарте есть coalesce, которая удобнее и ораклового nvl, и mssql-ного isnull. На текущий момент я рекомендую своим использовать в коде именно coalesce. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 13:55 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer Председатель Маоа теперь представьте Уважаемый, Вы пожалуйста сначала покажите свое решение, потом будем разбираться с другими Вашими... веселыми представлениями. Судя по вашему примеру, Вы хотите показать, что вы даете грант юзеру на процедуру чужой для него схемы, а на таблицу не даете. И при попытке вызвать процедуру он получает выборку, а при попытке сделать прямой селект к таблице от винта. Я правильно понял? Просто в оракле совсем несилен. Если это так, то такое же можно сделать в MSSQL,заводите юзера и даете ему грант на процедуру с селектом,а на прямой select не даете. Опять таки, если я правильно разобрался в вашем коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 14:17 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель МаоЕсли это так, то такое же можно сделать в MSSQL Ну так сделайте, пожалуйста. Покажите код и результаты, полный скрипт, который любой может выполнить и увидеть. Напоминаю: 1. Есть два пользователя, t_app и t_user (или как угодно еще названные) 2. У пользователя t_app есть таблица 3. У пользователя t_app есть процедура, получающая строку фильтра и возвращающую выборку из таблицы, отфильтрованную указанным выражением 4. Пользователь t_user может вызвать процедуру и увидеть результаты 5. Пользователю t_user недоступен прямой select к таблице ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 14:22 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuper Председатель Мао SergSuper Председатель Мао2 softwarer а теперь представьте что ваше безобидная лишняя строчка open по свой сути применяет иной механизм выборки данных. То есть обычный селект будет намного быстрее работать, чем перебор строчек. А когда большой объем выборки, оракл скажет кря? Не факт, это только домыслы Так может давайте проверим? А что проверять? И там и там процедуры выплёвывают данные клиенту. Почему должна быть разница? Допустим у вас есть 6000 записей, вам нужно их вернуть. При селекте это будет одна итерация к серверу с 6000 строками, а при курсоре 6000 итераций по одной записи. Улавливаете разницу. Это конечно очень натянуто, но суть я думаю ясна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 14:23 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель МаоДопустим у вас есть 6000 записей, вам нужно их вернуть. При селекте это будет одна итерация к серверу с 6000 строками, а при курсоре 6000 итераций по одной записи. Улавливаете разницу. Это конечно очень натянуто, но суть я думаю ясна. Конечно, улавливаем. Допустим, мы хотим вывести эти данные в грид, показать пользователю. Вашей программе придется ждать, пока с сервера приедут все 6000 (или 60000. или 600000) записей. Моя запросит первые сто строк, покажет первые двадцать пять, и если пользователь не будет особо нажимать PgDn, оставшиеся никогда у сервера и не попросит. Если же мне потребуются все строки, например чтобы построить по ним какую-нибудь хитрую графику, я установлю FetchSize в миллион и опять же получу их "за одну итерацию". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 14:28 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer SergSuperкстати вот пример недостатка оракловского null в строках по сравнению с ансишным Да нет недостатка, просто я расписал этот фрагмент так, чтобы неоракловцы точно поняли, что имеется в виду. Реально там следовало бы использовать функцию nvl2 и результат был бы таким же, как у Вас. Так точно же мне кажется не получится, но я думаю тут и так всё понятно Хотя интересно посмотреть как это выглядит с nvl2 и nvl softwarer Впрочем, это как раз наиболее неудачная особенность null-ов. Почему неудачная - приведу пример: Код: plaintext В этом случае, если из-за ошибки программиста coeff окажется null-ом, данные просто молча погибнут. Я бы предпочел, чтобы такая ситуация трактовалась как ошибка (возбуждала исключение). Вы в своем примере удачно используете эту особенность, но имхо редкое удобство неадекватно потенциальным минусам. Если поле не допускает нулов - то будет ошибка. Мне кажется наоборот удобно когда есть некая отдельная сущность. А на самом деле это больше дело привычки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 14:35 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer Председатель МаоДопустим у вас есть 6000 записей, вам нужно их вернуть. При селекте это будет одна итерация к серверу с 6000 строками, а при курсоре 6000 итераций по одной записи. Улавливаете разницу. Это конечно очень натянуто, но суть я думаю ясна. Конечно, улавливаем. Допустим, мы хотим вывести эти данные в грид, показать пользователю. Вашей программе придется ждать, пока с сервера приедут все 6000 (или 60000. или 600000) записей. Моя запросит первые сто строк, покажет первые двадцать пять, и если пользователь не будет особо нажимать PgDn, оставшиеся никогда у сервера и не попросит. Если же мне потребуются все строки, например чтобы построить по ним какую-нибудь хитрую графику, я установлю FetchSize в миллион и опять же получу их "за одну итерацию". Спорить не буду. Вы правы. Для прикладного применения принципиальной разницы нет. Конечному юзеру одновременно не нужно сразу 6000, элементарно на монитор не влезет. хватит и 100. Я просто сужу по MS, рекомендуется использовать курсоры, лишь тогда когда без них никак, а в оракл я так понял бегает по курсорам с крейсерской скоростью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 14:40 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuper Так точно же мне кажется не получится, но я думаю тут и так всё понятно Хотя интересно посмотреть как это выглядит с nvl2 и nvl Код: 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. куда nvl2 честно говоря и не знаю ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 14:44 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!!, достаточно было одной строчки вобщем без ANDа фильтер не получается :) а я почему-то считал что ISNULL - это ансишное, а COALESCE - это от SyBase... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 14:56 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuperХотя интересно посмотреть как это выглядит с nvl2 и nvl Код: plaintext 1. 2. SergSuperЕсли поле не допускает нулов - то будет ошибка. Если не допускает, то будет ошибка. А если допускает? SergSuperМне кажется наоборот удобно когда есть некая отдельная сущность. А на самом деле это больше дело привычки. Null как отдельная сущность - очень хорошая вещь. Это не дело привычки, поверьте, это дело соответствия инструмента задачам. Я работал над проектом, где было принято неиспользование null-ов, и насмотрелся на вытекающие из этого проблемы и ошибки, которые люди делали и делали несмотря на привычку. Я целиком за null как отдельную сущность, но данную конкретную деталь его определения - "большинство операций с null дает результатом null" - я бы сделал иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 15:26 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Привет, softwarer! Ты пишешь: softwarers> Я целиком за null как отдельную сущность, но данную конкретную деталь его определения - s> "большинство операций с null дает результатом null" - я бы сделал иначе.интересно об этом поговорить. как именно иначе? -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 15:28 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийкак именно иначе? Операции, в которых может участвовать null, можно разбить на три группы: - те, в которых его участие осмысленно (is null, =, ||) - те, в которых его участие [почти всегда] бессмысленно (скажем, арифметика) - те, в которых вообще говоря бессмысленно, но сложно отфильтровать (скажем, агрегатные функции) Куда отнести сравнение на меньше-больше - не уверен, интуитивно хочется во вторую группу, но есть ситуации, в которых будет уместна первая, так что скорее туда. Так вот, первую и третью группы я бы оставил работать как сейчас, а во второй аргумент null считал бы ошибкой. Разумеется, все это строится на предположении о существовании "бессмысленных" операций. А это предположение - на том, что с ситуацией, где арифметика с участием null осмысленна, я не сталкивался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 16:04 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Привет, softwarer! Ты пишешь: softwarers> - те, в которых его участие [почти всегда] бессмысленно (скажем, арифметика) s> Так вот, первую и третью группы я бы оставил работать как сейчас, а во второй аргумент null считал бы ошибкой. s> Разумеется, все это строится на предположении о существовании "бессмысленных" операций. s> А это предположение - на том, что с ситуацией, где арифметика с участием null осмысленна, я не сталкивался. ну а ныне, к примеру, стоимость = количество * цена, если любой из операндов NULL, то результат NULL, вполне логичен. ты предлагаешь генерить exception для таких случаёв? -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 16:18 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer SergSuperЕсли поле не допускает нулов - то будет ошибка. Если не допускает, то будет ошибка. А если допускает? А если поле допускает значение null, и в него таки записали null, пусть и по ошибке, по поводу чего СУБД возвращать ошибку? Если coeff окажется нулём -- тоже возвращать ошибку? А ведь данные пострадают немногим меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 17:00 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer Председатель МаоЕсли это так, то такое же можно сделать в MSSQL Ну так сделайте, пожалуйста. Покажите код и результаты, полный скрипт, который любой может выполнить и увидеть. Напоминаю: 1. Есть два пользователя, t_app и t_user (или как угодно еще названные) 2. У пользователя t_app есть таблица 3. У пользователя t_app есть процедура, получающая строку фильтра и возвращающую выборку из таблицы, отфильтрованную указанным выражением 4. Пользователь t_user может вызвать процедуру и увидеть результаты 5. Пользователю t_user недоступен прямой select к таблице Код: 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 17:09 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Если не строить динамическую строку, а возвращать нормальный селект, то курсоры и прочее открывать не нужно. Все нормально отработает. Как вариант еще можно динамически в сессии законнектится под sa затем дать права на select, отработать select, забрать права, отконнектится как sa. Но лучше курсор. То есть mssql 2000, насчет 2005 не в курсе при построении в процедуре строки select, работает так же как будто бы он прямой. Но если в проц. записать прямой селект статический, то он будет нормально отрабатывать у юзера, у которго нет гранта на селект, но есть грант на процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 17:16 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель, ну чего изощряться то? Вопрос был в том можно ли в 2000-м запустить динамический запрос под правами создателя процедуры. Ответ: НЕТ. В 2005 можно. Ну смешно же where вручную писать ( left(@name,3)=@filter). Мало ли чего нельзя, зачем рефлексировать - это же не говорит что без этого вообще невозможно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 17:32 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuperПредседатель, ну чего изощряться то? Вопрос был в том можно ли в 2000-м запустить динамический запрос под правами создателя процедуры. Ответ: НЕТ. В 2005 можно. Ну смешно же where вручную писать ( left(@name,3)=@filter). Мало ли чего нельзя, зачем рефлексировать - это же не говорит что без этого вообще невозможно Просто softwarer настаивал, чтобы ему привели код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 17:39 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarerНет, не так. Точнее, я не имею личного опыта - не вижу никакого смысла использовать ODBC - но кого-то из спрашиваюших лично посылал в статью, где расписывалось, как использовать эту фичу через ODBC.Посылать - дело нехитрое. Но что-то мне подсказывает, что реализация этой фичи даже если и возможна через ODBC, то сопровождается неоправданным геморроем в духе "мы это, конечно, сделать можем, но лучше не надо". ODBC не допускает асинхронной передачи данных, следовательно, эмуляция такой возможности будет более чем сложной при реализации и с весьма убогими результатами. softwarerПростуда здесь вызвана тем фактом, что клиентский код начинает неоправданно зависеть от реализации серверного.Хмм, степень оправданности - вещь достаточно субъективная. Полагаю в Oracle тоже найдутся подобные казусы, но мы о них разумеется, говорить не будем. softwarer ChAНо если правильно помню, то стандарт ODBC не поддерживает Тем хуже для него. Я не понимаю, какой смысл кивать на кривой и мертвый стандарт и гордиться наследованием его глупостей.Ну это всего лишь Ваше мнение, да и слухи о его смерти сильно преувеличены. IMHO, наличие любого общепринятого стандарта лучше, чем его отсутствие. Впрочем, знаком с Вашим пренебрежением к любым стандартам, включая законы ;) Хорошо, что это ограничивается только словами. softwarerРезюмируя: по сравнению с MSSQL, в Oracle для записи того же требуется одна лишняя строка (open for select вместо просто select). Этим мы покупаем именованные параметры-рекордсеты и возможность легко крутить выборки так, как нам удобно, в частности передавать их между подпрограммами и использовать на сервере.Это только синтаксис, за которым скрывается мощный промежуточный слой, доступный клиентам фактически только через "родной" API. А курсоры и в MSSQL можно передавать из вызываемой процедуры в вызывающую процедуру, только этим, как правило, никто не пользуется, так как принято работать с множествами, а не рекордсетами. Инструмент диктует правила владения им, топором забивать гвозди можно, но не так удобно, как молотком. softwarerЧто касается второго из приведенных мной примеров, то подозреваю ответа на него я не дождусьЕсли Вы про это , то с какого лешего Вы ждете ответа от меня ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 17:41 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао Ээ.... я бы отметил, что в постановке задачи говорится о фильтрации произвольным выражением, а не о передаче маски для конкретного поля. Если говорить о задаче в том объеме, который сделали Вы, мне кажется можно обойтись без промежуточной таблицы, возвращая статическую выборку - например, используя like по переданному значению. Но я бы отметил именно тот факт, что в MSSQL при полноценном решении придется делать так, как делаете Вы - сначала динамическим sql с собственными правами наполнить временную таблицу, а потом статическим sql вернуть ее наружу. Эффективность этой конструкции.... не впечатляет, имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 17:49 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChAПосылать - дело нехитрое Хм. ChA Но что-то мне подсказывает Это "что-то" - то же, что подсказывало ее невозможность? ChA, что реализация этой фичи даже если и возможна через ODBC, то сопровождается неоправданным геморроем в духе "мы это, конечно, сделать можем, но лучше не надо". Хм. Вообще-то весь ODBC - отлично вписывается в формулировку неоправданный геморрой в духе "мы это, конечно, сделать можем, но лучше не надо". Сколь я помню ту статью, никакого дополнительного геморроя при этом нет. Cерверная процедура остается неизменной, в ODBC результат возвращается так же, как вернулся бы из аналогичной MSSQL-процедуры и выбирается тем же клиентским кодом. ChAХмм, степень оправданности - вещь достаточно субъективная. В общем случае - да. Тем не менее, зависимость интерфейса от реализации - повсеместно считается неоправданной. ChAПолагаю в Oracle тоже найдутся подобные казусы, но мы о них разумеется, говорить не будем. Наверное, найдутся. Говорите, с интересом послушаю. Вон, председатель тоже был уверен в наличии казуса. ChAНу это всего лишь Ваше мнение, да и слухи о его смерти сильно преувеличены. Ну, "мнение" таки весомее "отмазок". Слухи же Вы легко можете развеять, если приведете внушительный список распространенного прикладного ПО, использующего ODBC как единственный либо основной интерфейс взаимодействия с БД. Могу даже ограничить задачу: список ПО авторства Microsoft, использующего ODBC как единственный либо основной интерфейс. Относительно ПО авторства Oracle и OCI - поверите на слово, что приведу такой список? ChAIMHO, наличие любого общепринятого стандарта лучше, чем его отсутствие. Общепринятых стандартов в RDBMS нет. Что же до стандартов вообще - наличие хороших стандартов хорошо, наличие плохих стандартов плохо. Отсутствие стандартов - посередине. ChAВпрочем, знаком с Вашим пренебрежением к любым стандартам, включая законы ;) Хорошо, что это ограничивается только словами. Поверхностное знакомство диктует поверхностные выводы. ChAА курсоры и в MSSQL можно передавать из вызываемой процедуры в вызывающую процедуру Стоп. Курсоры или рекордсеты? Поясню: в описанном механизме Oracle я могу один и тот же курсор и использовать на сервере, и передать на клиента. То есть если есть хранимка, возвращающая выборку, я могу использовать эту выборку и на сервере, и на клиенте. Сколь я понимаю в MSSQL, тот явный курсор, который можно передать, и тот неявный рекордсет, который едет на клиента - разные вещи, "одной процедуры для обоих применений" сделать не удастся. Или я заблуждаюсь? ChAто с какого лешего Вы ждете ответа от меня ? А кто Вам сказал, что я жду ответа от Вас? Эта фраза - часть резюме по сравнению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 18:10 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийну а ныне, к примеру, стоимость = количество * цена, если любой из операндов NULL, то результат NULL, вполне логичен. Он логичен математически. Но нелогичен и неудобен по бизнесу, с точки зрения решения практических задач. Соглашусь с тем, что ему можно придать практический смысл, что-нибудь типа "мы покупаем 10 тонн конопли, цена еще не известна, во вьюхе запланированных расходов тоже будет null". Но... не припомню, встречал ли такое хоть когда-нибудь. Мимопроходящийты предлагаешь генерить exception для таких случаёв? Да. Полагаю, так будет лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 18:18 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Привет, softwarer! Ты пишешь: softwarer Мимопроходящийты предлагаешь генерить exception для таких случаёв? s> Да. Полагаю, так будет лучше.в таком случае, в селекте ты не увидишь тех данных, которые в кортеже следуют "после" строки, генерирующей exception. это хорошо, или плохо? -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 18:21 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChAЭто только синтаксис, за которым скрывается мощный промежуточный слой, доступный клиентам фактически только через "родной" API. Нда. Признаться не ожидал, что Вы докатитесь до прямой лжи. Я лично сказал Вам, что этот слой доступен через ODBC. Вы легко могли бы выяснить, что он доступен через JDBC. Насчет ADO - не в курсе, наверное доступен, но лень выяснять. Итого, доступность в не менее чем 2/3 распространенных стандартов Вы назвали "только через родной API". Поздравляю Вас, гражданин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 18:21 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarerСколь я помню ту статью, никакого дополнительного геморроя при этом нет. Cерверная процедура остается неизменной, в ODBC результат возвращается так же, как вернулся бы из аналогичной MSSQL-процедуры и выбирается тем же клиентским кодом.Если Вы говорите о возврате только одного рекордсета, то нет проблем. Но Вы сами заикнулись о множественных результатах, получаемых через именованные параметры. Вот мне и стало интересно, как именно это эмулируется через ODBC. Будьте любезны, ссылочку на статью. softwarer ChAПолагаю в Oracle тоже найдутся подобные казусы, но мы о них разумеется, говорить не будем.Наверное, найдутся. Говорите, с интересом послушаю. Вон, председатель тоже был уверен в наличии казуса.Забавно, но мне казалось, что это Вы могли бы рассказать, я могу рассказать только по MSSQL. Итак, в Oracle того, что Вы называете казусом, не бывает, я Вас правильно понял ? Повторюсь, с председателем разбирайтесь сами, я не собираюсь отвечать за то, что сказали другие. softwarerСлухи же Вы легко можете развеять, если приведете внушительный список распространенного прикладного ПО, использующего ODBC как единственный либо основной интерфейс взаимодействия с БД.Практические любое, которое вынужденно работать с гетерогенными источниками. В частности, практически вся линейка продуктов Office. softwarerОбщепринятых стандартов в RDBMS нет.А я-то удивляюсь, как это из MSSQL можно получить данные из Oracle и наоборот. softwarerСтоп. Курсоры или рекордсеты? Поясню: в описанном механизме Oracle я могу один и тот же курсор и использовать на сервере, и передать на клиента. То есть если есть хранимка, возвращающая выборку, я могу использовать эту выборку и на сервере, и на клиенте. Сколь я понимаю в MSSQL, тот явный курсор, который можно передать, и тот неявный рекордсет, который едет на клиента - разные вещи, "одной процедуры для обоих применений" сделать не удастся. Или я заблуждаюсь?В данном случае, не совсем. В MSSQL есть механизм передачи данных через именованный параметр, но только курсоров в смысле ANSI. Передача в виде параметра(ов) того, что Вы называете рекордсетами, в MSSQL отсутствует, хотя иногда и может быть сэмулирована. А процедура для возврата данных в вызывающую процедуру или клиенту может быть одна и та же, просто в вызывающей процедуре придется делать возврат рекордсета во временную таблицу или через OPENQUERY, хотя в случае множественных результатов могут быть проблемы. softwarerА кто Вам сказал, что я жду ответа от Вас?Еще раз, почему тогда Вы задаете вопрос мне ? Я не прошу Вас отвечать за слова других ораклоидов, поэтому избавьте и меня от этого. softwarerЯ лично сказал Вам, что этот слой доступен через ODBC.С нетерпением жду ссылку на статью, где иллюстрируется работа с множеством именованных параметров типа рекордсет через ODBC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 20:10 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Саш [softwarer], наверно непрофильный трид, но но подмывает спросить. какие компоненты доступа к oraclе ты бы мог порекомендовать на win32 платформе ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2006, 20:38 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийв таком случае, в селекте ты не увидишь тех данных, которые в кортеже следуют "после" строки, генерирующей exception. это хорошо, или плохо? Ээ... это где сервер так себя ведет? Я как-то привык к тому, что получаю exception вместо выборки, если в ходе выполнения была ошибка. "Остановиться на ошибочной строке и вернуть половинчатый результат" - имхо неверная реакция в любом случае, null там или допустим деление на ноль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2006, 00:58 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChAЕсли Вы говорите о возврате только одного рекордсета, то нет проблем. Но Вы сами заикнулись о множественных результатах, получаемых через именованные параметры. Вот мне и стало интересно, как именно это эмулируется через ODBC. Будьте любезны, ссылочку на статью. Первое, что нашел - http://dtemplatelib.sourceforge.net/OracleResultSets.htm Позволю себе небольшую цитату оттуда: первая попавшаяся статья* This program: * Creates an ODBC connection to the database. * Creates a Packaged Procedure containing two result sets. * Executes the procedure and retrieves the data from both result sets. * Displays the data to the user. * Deletes the package then logs the user out of the database. Хватит? Кстати, чтобы уменьшить Вам возможность выкручиваться, сразу потребую уточнить Ваше утверждение. Я не делал утверждения в таком виде, в каком Вы его написали. Я сделал два отдельных утверждения: - Oracle возвращает выборки через именованные параметры - возвращаемые через ref cursor выборки доступны при работе через ODBC. ChAЗабавно, но мне казалось, что это Вы могли бы рассказать, я могу рассказать только по MSSQL. Итак, в Oracle того, что Вы называете казусом, не бывает, я Вас правильно понял ? Право, не могу судить, что я по Вашему мнению называю казусом - в наш топик этот термин ввели. Возможно, и мог бы что-то рассказать, но в том контексте, в котором развивается наша беседа, не вижу смысла. Чтобы создать у Вас верное впечатление - мои претензии к Oracle относятся к категории "жемчуг мелок". ChAПрактические любое, которое вынужденно работать с гетерогенными источниками. В частности, практически вся линейка продуктов Office. Итак, Office - принято. Правда, работа с БД - мягко говоря второстепенная часть его функционала, а в единственном БД-продукте - Access - ODBC основным протоколом вроде бы не является. Any more? ChA softwarerОбщепринятых стандартов в RDBMS нет.А я-то удивляюсь, как это из MSSQL можно получить данные из Oracle и наоборот. Например, из MSSQL в Oracle лучше всего через MS SQL Server Transparent Gateway. Можно через ODBC, но это только если нужно "дешево и сердито". В обратном направлении качать не требовалось, не могу судить. ChAА процедура для возврата данных в вызывающую процедуру или клиенту может быть одна и та же, просто в вызывающей процедуре придется делать возврат рекордсета во временную таблицу или через OPENQUERY Это решение понятно, но ведет к существенным накладным расходам, соответственно в исходной фразе я не имел его в виду. Понятно, что через временные таблицы можно сделать практически все что угодно. ChAЕще раз, почему тогда Вы задаете вопрос мне ? Я не прошу Вас отвечать за слова других ораклоидов, поэтому избавьте и меня от этого. Еще раз: я не задавал Вам вопрос. Если внимательно посмотрите сказанное, никакого вопросительного знака в той фразе не обнаружите. Я подвел резюме различий, и в нем в том числе сослался на заданный мной вопрос, имея в виду его тему как одно из отличий. ChAС нетерпением жду ссылку на статью, где иллюстрируется работа с множеством именованных параметров типа рекордсет через ODBC. Надеюсь, дождались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2006, 01:30 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
solo28Саш [softwarer], наверно непрофильный трид, но но подмывает спросить. какие компоненты доступа к oraclе ты бы мог порекомендовать на win32 платформе ? Лично я использую ODAC, местами доработанный под мои требования, и уходить с него не планирую. Если хочется из бесплатных, я бы в первую очередь посмотрел на AnyDAC от Дмитрия Арефьева; я его не смотрел за ненадобностью, но человек действительно грамотный и работает на совесть, результат должен быть хорош. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2006, 01:34 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer Например, из MSSQL в Oracle лучше всего через MS SQL Server Transparent Gateway. Можно через ODBC, но это только если нужно "дешево и сердито". В обратном направлении качать не требовалось, не могу судить. Обратно - OLEDB под видом Linked Server,DTS ,OPENQUERY авторИтак, Office - принято. Правда, работа с БД - мягко говоря второстепенная часть его функционала, а в единственном БД-продукте - Access - ODBC основным протоколом вроде бы не является. В новом офисе - добавлен OLEDB . В новом Excel работа с БД ,имхо, уже не второстепенная часть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2006, 01:59 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarerПервое, что нашел - http://dtemplatelib.sourceforge.net/OracleResultSets.htm И что Вы этим примером хотели показать ? Что данные из именованных параметров-рекордсетов считываются точно также, как если бы они считывались из аналогичной процедуры в MSSQL, т.е., последовательно ? Так мне не это было интересно, даже не вызывало сомнений, что это возможно. softwarerКстати, чтобы уменьшить Вам возможность выкручиваться, сразу потребую уточнить Ваше утверждение. Я не делал утверждения в таком виде, в каком Вы его написали. Я сделал два отдельных утверждения: - Oracle возвращает выборки через именованные параметры - возвращаемые через ref cursor выборки доступны при работе через ODBC. Хммм. Вы сделали утверждение softwarer"Нормально" - это возвращать сколько угодно выборок каждую через свой именованный out параметр , на что получили ответ ChAНо этот механизм будет работать только через OCI, но не через ODBC, разве не так ?. На что получаю softwarerНет, не так . Точнее, я не имею личного опыта - не вижу никакого смысла использовать ODBC - но кого-то из спрашиваюших лично посылал в статью, где расписывалось, как использовать эту фичу через ODBC. Я выражаю сомнение, что все так просто ChAреализация этой фичи даже если и возможна через ODBC, то сопровождается неоправданным геморроем в духе "мы это, конечно, сделать можем, но лучше не надо"., но получаю softwarerCерверная процедура остается неизменной, в ODBC результат возвращается так же, как вернулся бы из аналогичной MSSQL-процедуры и выбирается тем же клиентским кодом.О как. И получаю завершающий удар softwarerПризнаться не ожидал, что Вы докатитесь до прямой лжи. Я лично сказал Вам, что этот слой доступен через ODBC. в ответ на ChA softwarerпо сравнению с MSSQL, в Oracle для записи того же требуется одна лишняя строка (open for select вместо просто select). Этим мы покупаем именованные параметры-рекордсеты и возможность легко крутить выборки так, как нам удобно , в частности передавать их между подпрограммами и использовать на сервере.Это только синтаксис, за которым скрывается мощный промежуточный слой, доступный клиентам фактически только через "родной" API.. И в качестве доказательства вы подсовываете код, в котором все именованные рекордсеты из Oracle идут через ODBC точно также, как и аналогичные из MSSQL, то бишь - "гуськом". Ну и где тут softwareименованные параметры-рекордсеты и возможность легко крутить выборки так, как нам удобно, доступные через ODBC ? И кто после этого выкручивается ? Впрочем, этот вопрос уже становится риторическим. softwarer ChA softwarerОбщепринятых стандартов в RDBMS нет.А я-то удивляюсь, как это из MSSQL можно получить данные из Oracle и наоборот. Например, из MSSQL в Oracle лучше всего через MS SQL Server Transparent Gateway. Можно через ODBC, но это только если нужно "дешево и сердито". В обратном направлении качать не требовалось, не могу судить.Замечательно, и через что работает MS SQL Server Transparent Gateway ? Если верить google, то не через ODBC или OLEDB, а через некий native API MSSQL. Последнее, что осталось - DBLibrary, но BOLThe DB-Library API has not been enhanced beyond the level of SQL Server version 6.5. All DB-Library applications can work with SQL Server 2000, but only as 6.5 level clients. Features introduced in SQL Server 2000 and SQL Server version 7.0 are not supported for DB-Library applications.При этом он почему-то лучше. По каким критериям ? Проводилось тестирование, которое показало безусловное преимущество MS SQL Server Transparent Gateway перед всеми другими вариантами или просто так написано в документации ? Я не ошибусь, если предположу, что упомянутый выше Gateway продается отдельно ? Еще один риторический вопрос. Если нет общепринятых стандартов, то нахрена, собственно, Oracle вообще поддерживает работу с ODBC, ADO, OLEDB, а также добавляет в свою диалект SQL новые возможности, декларируемые ANSI, например, те же JOIN, которые вам не нравятся ? softwarer ChAА процедура для возврата данных в вызывающую процедуру или клиенту может быть одна и та же, просто в вызывающей процедуре придется делать возврат рекордсета во временную таблицу или через OPENQUERY Это решение понятно, но ведет к существенным накладным расходам, соответственно в исходной фразе я не имел его в виду. Понятно, что через временные таблицы можно сделать практически все что угодно.И где там "существенные накладные расходы" ? Я готов согласиться, что упомянутые рекордсеты достаточно удобны в определенных ситуациях, но у них есть свой недостаток, к ним нельзя применить еще одну выборку, мне придется перебирать его с первого элемента и до последнего, разве нет ? Понятно, что с таблицей таких проблем нет и она может быть включена в любой новый запрос на тех же основаниях, что и обычная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2006, 04:32 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Как всегда вполне конкретный вопрос о "СУБД для учета финансовых потоков" перерос в какое-то переругивание о специфике реализации той или иной фичи в БД. Ведь была же здравая мысль, что писать можно на всём, что знаешь. Что такое Ассемблер не все же ещё забыли? По поводу SQL SERVERa - по моему мнению detached recordsets и temporary tables - это способы избавиться от блокировок, налаживаемых при чтении. У Оракла этой проблемы нет, поэтому он так легко оперирует курсорами (он платит за это в другом месте - напомню про ORA-01555 Snapshot too old). И выборку ему не надо торопиться отсылать на клиента по этой же причине. ChAЯ готов согласиться, что упомянутые рекордсеты достаточно удобны в определенных ситуациях, но у них есть свой недостаток, к ним нельзя применить еще одну выборку, мне придется перебирать его с первого элемента и до последнего, разве нет ? Понятно, что с таблицей таких проблем нет и она может быть включена в любой новый запрос на тех же основаниях, что и обычная. Необходимость повторной фильтрации уже выбранных данных говорит о том, что вы что-то забыли добавить в класс WHERE в оригинальном запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2006, 20:36 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChAИ что Вы этим примером хотели показать ? Что данные из именованных параметров-рекордсетов считываются точно также, как если бы они считывались из аналогичной процедуры в MSSQL, т.е., последовательно ? Так мне не это было интересно, даже не вызывало сомнений, что это возможно. Тогда странно, что мне потребовалось прямо сказать Вам об этом, да еще и прочитать Ваше... гхм... утверждение. Оглядываемся чуть назад: ChA softwarer"Нормально" - это возвращать сколько угодно выборок каждую через свой именованный out параметр, а не в виде одной кучи Допустим. Но этот механизм будет работать только через OCI, но не через ODBC, разве не так ? Лично я вижу разницу. И рассказывал, что в Oracle запросто можно написать "нормальную" в вышеупомянутом смысле ХП, и ее результат доступен через ODBC. [чуть более поздняя вставка] Как чувствовал, что Вы скажете, что вопрос был исключительно в неумении ODBC работать с именованными параметрами. Сразу готов ответить: представления не имею, умеет ли вообще ODBC работать нормально или только через свои идиотские вопросики. ChAХммм. Вы сделали утверждение Да, сделал. Позволю себе не цитировать всю расписанную Вами цепочку, а сразу перейти к финалу. ChaНу и где тут softwarerименованные параметры-рекордсеты В хранимке на сервере. Если Вы забыли, мы обсуждаем различие в возврате рекордсетов из MSSQL и Oracle-хранимок. Cha softwarerи возможность легко крутить выборки так, как нам удобно, доступные через ODBC ? Возможность легко крутить, как я сказал выше, на сервере. Доступность таких выборок из ODBC показана кодом, ссылку на который дал. ChaИ кто после этого выкручивается ? Ну давайте считать. 1. Кто пытается свести сравнение серверных ХП к нахрен никому не нужному ODBC? 2. Кто при этом задал мне вопрос, который выглядел вполне нормальным профессиональным интересом, а сейчас оказывается его следует читать примерно так: "умеет ли ODBC делать то, чего он делать не умеет?" [примечание - я представления не имею, умеет ли вообще ODBC работать с именованными параметрами, судя по Вашему давлению предполагаю, что не умеет] Впрочем, этот вопрос уже становится риторическим. ChaЗамечательно, и через что работает MS SQL Server Transparent Gateway ? Представления не имею. Можно порыться и выяснить, но мне этого не требовалось. Рыться не хочу ввиду вероятности того, что Вы снова расскажете о том, что знали заранее и это неинтересно. ChaПри этом он почему-то лучше. По каким критериям ? По скорости перекачки данных. Кроме того там есть еще вопрос поддержки фич, которые не поддерживаются при работе через ODBC, но они мне не требовались. ChaПроводилось тестирование, которое показало безусловное преимущество MS SQL Server Transparent Gateway перед всеми другими вариантами или просто так написано в документации ? Безусловно, проводилось. В отличие от Вас, я не полагаюсь на "мне кажется". ChaЯ не ошибусь, если предположу, что упомянутый выше Gateway продается отдельно ? Именно так, с точностью до устаревания моих сведений. И? ChaЕще один риторический вопрос. Если нет общепринятых стандартов, то нахрена, собственно, Oracle вообще поддерживает работу с ODBC, ADO, OLEDB, Об этом лучше спросить у самого Oracle. По моим впечатлениям, подобную поддержку они пишут по остаточному принципу, почему такое впечатление - потому что слишком уж плохой результат. Выглядит отмазкой для проформы, для того, чтобы всякие идиоты меньше донимали их. В качестве побочной причины можно назвать традиционный маркетоидный вальс - микрософт пишет хреновый драйвер к Oracle, Oracle пишет тоже невпечатляющий, но показывающий, насколько хренов драйвер от Microsoft. Chaа также добавляет в свою диалект SQL новые возможности, декларируемые ANSI, например, те же JOIN, которые вам не нравятся ? Зависит от возможностей. Тот же вышеупомянутый coalesce - удобная вещь, и я рад, что ее добавили. Join - чистой воды маркетинговый ход. Так и быть, открою Вам тайну - в поддержке ansi-шных join-ов регулярно отлавливают баги, при том что они поддерживаются уже лет пять, только на днях (в последнем патчсете) закрыли очередной. ChaИ где там "существенные накладные расходы" ? Перекладывание данных во временную таблицу. ChaЯ готов согласиться, что упомянутые рекордсеты достаточно удобны в определенных ситуациях, но у них есть свой недостаток, к ним нельзя применить еще одну выборку, Если задаться такой целью, то можно (в Oracle), но имхо малоосмысленная задача. Если сформирована "не та" выборка - нужно доработать так, чтобы формировалась "та". Делать "выборку из выборки" плохо хотя бы тем, что результатом может быть плохой план. Временные таблицы имхо подходят, если нужно многократно использовать эти данные, либо формировать их интерактивно. P.S. Все-таки, если не трудно, расскажите, что Вы так привязались к этому ODBC? Нехорошая мысль, но не могу отделаться от ощущения, что Ваш любимый инструмент, уж не знаю что, вряд ли Office, просто ничего другого не умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2006, 21:49 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Anton DemidovКак всегда вполне конкретный вопрос о "СУБД для учета финансовых потоков" Мне кажется, вопросы, соответствующие Спросите здесь, какую СУБД лучше выбрать для вашего проекта обречены. Обречены потому, что на самом деле 90% проектов можно сделать в 90% СУБД, а с оставшимися 10% задач работают люди, способные выбрать самостоятельно. Поэтому после фразы "да делайте в чем угодно, что лучше знаете итп" по теме сказать больше нечего, а следовательно начинается флуд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2006, 21:54 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Anton Demidov По поводу SQL SERVERa - по моему мнению detached recordsets и temporary tables - это способы избавиться от блокировок, налаживаемых при чтении. Есть и другие применения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2006, 23:33 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
OS/360 Anton Demidov По поводу SQL SERVERa - по моему мнению detached recordsets и temporary tables - это способы избавиться от блокировок, налаживаемых при чтении. Есть и другие применения. Кто бы сомневался :) Мы программисты - народ изобретательный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 00:01 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Anton Demidov OS/360 Anton Demidov По поводу SQL SERVERa - по моему мнению detached recordsets и temporary tables - это способы избавиться от блокировок, налаживаемых при чтении. Есть и другие применения. Кто бы сомневался :) Мы программисты - народ изобретательный. Но у всех применений есть одно общее - это всё для борьбы с TSQL. один INSERT EXECUTE чего стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 00:13 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer ChaИ кто после этого выкручивается ? Ну давайте считать. 1. Кто пытается свести сравнение серверных ХП к нахрен никому не нужному ODBC? 2. Кто при этом задал мне вопрос, который выглядел вполне нормальным профессиональным интересом, а сейчас оказывается его следует читать примерно так: "умеет ли ODBC делать то, чего он делать не умеет?" [примечание - я представления не имею, умеет ли вообще ODBC работать с именованными параметрами, судя по Вашему давлению предполагаю, что не умеет] Впрочем, этот вопрос уже становится риторическим.Да, ладно, можете не продолжать. Вы, если уж вопрос не понятен, то переспрашивайте, а то отвечаете, отвечаете, а к концу выясняется, что оказывается и вопросы совсем не те задавались и утверждения Ваши не связаны друг с другом, как будто Вы их делали в пространство, а не в контексте дискуссии по поводу ODBC, "родного" API и softwarerименованные параметры-рекордсеты и возможность легко крутить выборки так, как нам удобно, в частности передавать их между подпрограммами и использовать на сервере. А если не в частности или, точнее, а еще как и где, и через какой интерфейс ? IMHO, был задан конкретный вопрос, с кучей уточняющих, а мне рассказали, что, оказывается, Oracle умеет передавать данные через ODBC. Спасибо, конечно, но я это и так знаю, так же как и то, что практически любой производитель СУБД, как минимум, в обязательном порядке пишет не только native API, но драйвер ODBC для доступа к своей СУБД. Меня всего лишь заинтересовало, что такое "нормально", и есть ли способ воспользоватся таким способом с помощью стандартов, например, того же ODBC. И ежу понятно, что "родной" API обычно богаче возможностями, чем "общепринятые" стандарты. А вдруг ? softwarerРыться не хочу ввиду вероятности того, что Вы снова расскажете о том, что знали заранее и это неинтересно.Смешно. Правда. Вы ведь здесь не студентам лекции читаете, и если задают вопрос, то не надо начинать с Адама. Если будет что-то непонятно, здесь переспросят, хотя это не всегда помогает. Но приложите хотя бы минимум усилий, чтобы понять, что именно хочет узнать собеседник, а не делать несвязанные друг с другом и контекстом утверждения. Тут их и так более чем достаточно. softwarerВ отличие от Вас, я не полагаюсь на "мне кажется".Судя по Вашим ответам, Вам иногда кажется , что Вы отвечаете на заданные вопросы. Кстати, наша предыдущая дискуссия развивалась подобным же образом. И многие другие до того. Мы с Вами как два инопланетянина, вроде говорим на одном языке, но, за редким исключением, категорически не понимаем друг друга. Впрочем, это лирика, забудем. softwarerТак и быть, открою Вам тайну - в поддержке ansi-шных join-ов регулярно отлавливают баги, при том что они поддерживаются уже лет пять, только на днях (в последнем патчсете) закрыли очередной.Я потрясен, а можно я остальным расскажу ? Мне, собственно, все равно, есть у Oracle проблемы или нет. Также как у IBM с их DB2 и перекупленным Informix, Sybase со всем выводком его клонов и прочими, несть им числа. Соответственно, никогда не было и нет цели доказать, что Oracle, или любой другой по списку является никуда не годным продуктом. Это было бы просто глупостью, у всех есть свои плюсы и свои минусы. Более того, мне совершенно не хочется защищать MS с их SQL Server, пусть даже он сейчас является основным источником моих доходов. Но никак не могу понять, почему некоторые профессионалы в одной СУБД, уверены, что точно знают "слабые" места другой СУБД, в лучшем случае - имеющие с упомянутой достаточно "шапочное" знакомство, причем наверняка, очень давно, но тем не менее, время от времени делают по этому поводу уверенные заявления. Когда подобные заявления делают "мальчики", вчерашние студенты, это понятно - юношеский максимализм, отождествление себя с продуктом, просто заявить о себе, но, более чем странно, видеть такого же рода заявления от "мужей". Возможно, я идеалист, в конце концов, это флеймовый форум, но с другой стороны, он один из немногих, где адепты разных СУБД могли бы обменяться мнениями, у кого какие особенности. Но сплошь и рядом это выливается в свару, hollywar. softwarer ChaИ где там "существенные накладные расходы" ? Перекладывание данных во временную таблицу.Хорошо, спрошу иначе: почему Вы решили, что это "существенные накладные расходы" ? Поясню, недавно прозвучало уверенное заявление, что таблицы INSERTED и DELETED в триггере строятся невероятно "доооолго". Оказалось, совсем даже нет, просто очередной шум в кустах. Хотелось бы понять, что скрывается за Вашим утверждением. softwarer ChaЯ готов согласиться, что упомянутые рекордсеты достаточно удобны в определенных ситуациях, но у них есть свой недостаток, к ним нельзя применить еще одну выборку, Если задаться такой целью, то можно (в Oracle), но имхо малоосмысленная задача.Можно ? Каким образом ? Можете проиллюстрировать это скриптом ? В Informix тоже был(и есть) механизм рекордсетов, подобный оному в Oracle, но выбор рекордсета из другого рекордсета или попытка слияния сводились просто к перебору элементов вложенными циклами с проверкой условий на каждом шаге, что было тождественно работе с курсорами в смысле ANSI, только без необходимости выполнять оператор FETCH. Причем, насколько помню, несмотря на то, что это внешне было сильно похоже на перебор, оптимизатор тем не менее тоже принимал в этом посильное участие, хотя может и не всегда удачное, так как он оптимизировал, в первую очередь, сами выборки, но не их слияние. softwarerДелать "выборку из выборки" плохо хотя бы тем, что результатом может быть плохой план.IMHO, несколько сомнительное утверждение. Скорее, наоборот. Если буду не прав, и к Oracle нижесказанное не имеет отношения, поправьте. Каждый оптимизатор имеет ограниченное время на оптимизацию и поэтому выбирает, вообще говоря, не оптимальный план, а квазиоптимальный. Если в запросе участвует немного таблиц, то вероятность того, что квазиоптимальный будет оптимальным при заданных условиях достаточно высока. В противном случае, велик шанс, что в отведенное ему время на оптимизацию запроса, любой план, который он выберет может оказаться весьма далек от идеала. Поэтому, разбивая сложный запрос на подвыборки у нас есть шанс, что мы можем сильно облегчить жизнь оптимизатору. При этом, не исключено, что для запроса, включающего все таблицы, существует план, который идеален при исходных условиях, но только на его поиск уйдет гораздо больше времени, чем выполнить несколько подвыборок и слить уже их. Т.е., теоретически идеальный план перестает быть таковым практически. Разумеется, опытный оптимизатор(программист), потратив некоторое количество времени, может наваять оптимальный план, но только для заданных конкретных условий или их подмножества, но совсем неоптимальный для других. Так как, в общем случае, множество вариантов условий может быть неограниченно(опять же, практически, но не обязательно - теоретически), то оптимизация вручную имеет свои естественные пределы. Посему мы возвращаемся к предыдущему абзацу и ищем способ помочь оптимизатору(программе). Разумеется, даже при разбиении сложного запроса на подвыборки необходимо включать голову, а не делать это разбиение механически. softwarerВременные таблицы имхо подходят, если нужно многократно использовать эти данные, либо формировать их интерактивно.Насчет интерактивности не уловил, вне контекста, но, кроме многократного использования, еще одно из применений описано выше. softwarerВсе-таки, если не трудно, расскажите, что Вы так привязались к этому ODBC?Все просто, в 90 годы приходилось посопрягать разный коней с трепетными ланями, и ODBC был практически единственным способом сделать это без особых сложностей, так как, мало того, что на всех API не напишешься, так еще и не ко всем источником оно существовало, кроме как в виде драйвера ODBC. Так что, слава Богу, стандартом он таки был, хотя Вы ему в этом отказываете. Да, сейчас ему на смену приходит OLEDB, так как ADO, всего лишь надстройка над ним, но, насколько наслышан, есть еще немало проблем при реализации провайдеров, поэтому я лично пока не торопился бы хоронить ODBC. В конце концов, еще хватает источников данных, для которых уже никто и никогда OLEDB-провайдера писать не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 05:17 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChA softwarerименованные параметры-рекордсеты и возможность легко крутить выборки так, как нам удобно, в частности передавать их между подпрограммами и использовать на сервере. А если не в частности или, точнее, а еще как и где, и через какой интерфейс ? Продекларировать набор и сказать "вот это полный список и ничего другого нет", я не рискну. И важного для меня - еще асинхронный фетч. Через все интерфейсы, которые это умеют. OCI и JDBC это умеют, насчет прочих - не проверял. ChAМеня всего лишь заинтересовало, что такое "нормально", Надеюсь, ответ был дан. Во всяком случае, уточняющих вопросов более не последовало. ChAи есть ли способ воспользоватся таким способом с помощью стандартов, например, того же ODBC. Есть. Можно писать "нормальные" ХП и пользоваться ими через ODBC. ChAИ ежу понятно, что "родной" API обычно богаче возможностями, чем "общепринятые" стандарты. Что является основной причиной неприменимости "общепринятых" стандартов для серьезных целей. На всякий случай уточню: еще встречаются.... наивные молодые люди, пытающиеся работать с Oracle через ADO. Бедняги. У яверов практически нет выбора, но там существует возможность расширить драйвер в "нестандартную" сторону, чем Oracle активно пользуется. Что касается пытающихся работать с Oracle через ODBC, то видимо существуют, но в следовых количествах. ChA softwarerРыться не хочу ввиду вероятности того, что Вы снова расскажете о том, что знали заранее и это неинтересно.Смешно. Правда. Вы ведь здесь не студентам лекции читаете, и если задают вопрос, то не надо начинать с Адама. С Адама я начинаю ответ на вопрос, если явный новичок задает вопрос на какую-то серьезную тему - такую, что без знания соответствующего адама наверняка накосячит. В данном случае я отвечал на заданный вопрос. Так как его понял с учетом предполагаемой грамотности собеседника. Если как Вы сейчас ведете, вопрос был "можно ли писать ХП на ODBC", то такой вопрос я не понимаю. ChAНо приложите хотя бы минимум усилий, чтобы понять, что именно хочет узнать собеседник, Пытаюсь, в меру своих сил. Надеюсь, Вы собираетесь приложить аналогичный минимум усилий, чтобы быть понятым? ChA softwarerВ отличие от Вас, я не полагаюсь на "мне кажется".Судя по Вашим ответам, Вам иногда кажется , что Вы отвечаете на заданные вопросы. (как я люблю логичные ответы) Согласен. И? Где я "полагаюсь" на это "кажется"? Опять же - именно на это "кажется", а не на более материальные критерии, например на отсутствие уточняющих вопросов. Если нигде - причем тут это? Снова какой-то контекст, которого я не понимаю? ChAКстати, наша предыдущая дискуссия развивалась подобным же образом. И многие другие до того. К сожалению, я не помню наших предыдущих дискуссий, во всяком случае в контексте именно Вашего в них участия. Если Вы помните - тем более, почему бы не подстелить соломки заранее и не выражаться максимально четко? ChA softwarerТак и быть, открою Вам тайну - в поддержке ansi-шных join-ов регулярно отлавливают баги, при том что они поддерживаются уже лет пять, только на днях (в последнем патчсете) закрыли очередной.Я потрясен, а можно я остальным расскажу ? Хм. Глядя на свое письмо в форуме, на ответ.... такое впечатление, что провоцируете ответить "нет, нельзя". Меня и самого это изрядно удивляет, но это уже дело оракла, каким криворуким студентам он поручает этот участок работы. С моей точки зрения, этот факт показывает в первую очередь реальное отношение к этой фиче, а также ее практическую востребованность 1 . 1 Востребованность - просто если представить большой проект на ansi join-ах, да еще и не один а хотя бы каждый десятый, я так думаю, все мыслимые баги были бы отрапортованы наткнувшимися на них куда быстрее ChAНо никак не могу понять, почему некоторые профессионалы в одной СУБД, уверены, что точно знают "слабые" места другой СУБД, (как я люблю логичные ответы) Не готов говорить за таинственных некоторых профессионалов, посоветовал бы спросить прямо у каждого, начав с топикстартера. Лично я как основной источник информации использую утверждение профессионалов, не опровергнутых другими профессионалами. Скажем, для построения задачки имени председателя я использовал FAQ форума MSSQL. Чуть ниже я сошлюсь на Вас. В целом по этому абзацу - будьте добры конкретику. Кто, когда, как и чем плохо. Абстрактные заявления в воздух стоят примерно столько же, сколько сероводород (или что там) объемом в один пук. ChAХорошо, спрошу иначе: почему Вы решили, что это "существенные накладные расходы" ? То, что было сказано в топике, в том числе сказано Вами и то, что не опровергнуто Вами, я понял следующим образом: для передачи через ODBC результат выборки формируется целиком. Это означает фактическое удвоение требуемой оперативки 2 - в ней будет лежать собственно временная таблица и та же таблица в виде ODBC-ответа. Удвоение потребности в памяти я полагаю существенными расходами. Разумеется, есть и другие тонкие места, но там уже надо уточнять реализацию, прежде чем что-то утверждать, их я в виду не имел. 2 Здесь я предполагаю, что временная таблица целиком лежит в оперативке как более эффективный вариант. Если это не так и таблица уйдет на диск, это будет еще более существенными расходами. ChAПоясню, недавно прозвучало уверенное заявление, что таблицы INSERTED и DELETED в триггере строятся невероятно "доооолго". Насколько я помню, от меня такого заявления не звучало. ChA softwarerЕсли задаться такой целью, то можно (в Oracle), но имхо малоосмысленная задача.Можно ? Каким образом ? Криво и тяжело, примерно как ответ председателя на мою задачу :) Судя по направлению развития, прямая фича такого рода должна появиться, но пока придется извращаться, примерно так 3 : Код: 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. 3 На всякий случай оговорюсь: я не искал решения такой задачи, может и есть какая-нибудь неизвестная мне фича Oracle, которая позволит действовать напрямую. Из известных мне - приходится вот так. ChAЕсли буду не прав, и к Oracle нижесказанное не имеет отношения, поправьте. Сказанное скорее верно, хотя и с оговорками - скажем, там подразумевается, что план вычисляется для каждого запроса, в то время как переиспользование плана - основа эффективности большинства систем, в том числе, насколько мне известно, и в MSSQL. Но вопрос в выводах, которые следует сделать. Первейшая задача, которую следует решить - не потерять собственно оптимальный план из пространства возможных решений, причем не только "оптимальный на текущий момент", но и "оптимальный с учетом возможных изменений в будущем". Изменения в будущем включают в себя как изменение статистик в данных, так и изменение бизнес-логики (грубо говоря, если есть десять взаиомдействующих подпрограмм, и в одну надо внести изменение, мало кто после этого начнет анализ и редизайн остальных девяти). Для того, чтобы не потерять оптимальный план, главное - не отсечь лишнего. Надо запретить оптимизатору явно неверные решения, намекнуть на желательные и оставить максимальную свободу выбора в деталях, оценить которые программисту затруднительно. И здесь жесткое разбиение на подзапросы имхо малоудачно. Почему: позволю себе упрощенный пример. Допустим, я пишу что-нибудь типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Здесь subquery1 и subquery2 - те подзапросы, на которые Вы разбили бы большой запрос. Так вот, вполне может оказаться, что Вы совершенно правы, и A join B и D join E стоит выполнять прежде других операций, но вот C с точки зрения оптимальности стоит подсоединять самой последней. Однако! Однако C должна быть подсоенинена в первый запрос с точки зрения логики, понимания смысла этого запроса. Хинты в общем запросе дадут здесь оптимум, а разбиение ведет к неприятной коллизии, которая - если говорить о практике - скорее всего будет разрешена не в сторону эффективности. ChAНасчет интерактивности не уловил, вне контекста, Ну, самый простой пример такой функциональности - "искать в найденном". То есть временная таблица формируется последовательностью команд пользователя, не просто как промежуточные данные для единственной операции. ChAВ конце концов, еще хватает источников данных, для которых уже никто и никогда OLEDB-провайдера писать не будет. Я бы сказал, уже хватает источников, для которых никто и никогда не будет писать ODBC-драйвер. Собственно, многолетняя неисправляемая Microsoft-ом кривизна ODBC-драйвера экселя это иллюстрирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 13:15 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
что-то непонял с именоваными ref_cursors, любой вменяемый инструмент у меет нормально с этим работать в jdbc умеет, .Net через ODP.NET умеет, всякие php,perl работают через OCI. что там еще бывает, делфи, через что там делфи работает ? http://www.oracle.com/technology/pub/articles/mastering_dotnet_oracle/williams_refcursors.htmlThe MultipleActiveResultSets method illustrates a feature of Oracle Data Provider for .NET, by retrieving and "randomly" processing multiple result sets that are concurrently active. This feature has been available since the first version of ODP.NET. In addition, note that this code "skips" the second ref cursor during processing. The first and third result sets are retrieved to the .NET client, but the second result set's data is deferred and remains on the database server. This improves response time, because the second result set's data retrieval can be deferred until a time when it may be needed. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 13:53 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer ChA softwarerв поддержке ansi-шных join-ов регулярно отлавливают баги, при том что они поддерживаются уже лет пять, только на днях (в последнем патчсете) закрыли очередной....... С моей точки зрения, этот факт показывает в первую очередь реальное отношение к этой фиче, а также ее практическую востребованность 1 . 1 Востребованность - просто если представить большой проект на ansi join-ах, да еще и не один а хотя бы каждый десятый, я так думаю, все мыслимые баги были бы отрапортованы наткнувшимися на них куда быстрееКогда таковые впервые появились в MSSQL, то ими тоже несколько лет мало кто пользовался. И до сих пор можно встретить программистов, которые их игнорируют, по незнанию ли, по непониманию ли, или еще по каким-то третьим причинам. Но, как правило, это либо новички, либо перешедшие с других платформ, в то время как все разработчики, квалификация которых оценивается на профильном форуме достаточно высоко, поголовно используют такой синтаксис. Просто как факт, не более. А то, что востребованность их невелика среди адептов Oracle, скорее всего связано именно с определенными возможностями языка. Рискну предположить, что в их коде очень часто встречается манипуляции с данными через рекордсеты, то чего лишен MSSQL, возможности которого, за редким исключениям, не выходят за рамки ANSI и ограничены операциями над множествами. Хотя появление 2005, возможно, что-то меняет, но, к сожалению, пока не до него, посему ничего внятного в его адрес. softwarerдля передачи через ODBC результат выборки формируется целиком. Это означает фактическое удвоение требуемой оперативки - в ней будет лежать собственно временная таблица и та же таблица в виде ODBC-ответа. Удвоение потребности в памяти я полагаю существенными расходами.Понял. По поводу первого предложения, то нет, насколько мне известно, тем более в случае возврата множественных рекордсетов. Например, выполнив Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Результат: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. По поводу второго. Не совсем уловил ход мысли, не вижу связи между ODBC и временной таблицей. Тем более, что в первом случае - это память клиента, а во втором - сервера. А где хранится временная таблица, в ОЗУ или в tempdb, - неважно, ее использование должно быть оправдано в любом случае, например, повышением общей производительности или большей предсказуемостью поведения. Если она позволит выполнить какой-либо SQL-код быстрее, чем без ее использования, то вполне естественно, что за это придется чем-то платить, например, расходом памяти. В принципе, качели "память - скорость" - частое явление при программировании, по крайней мере, по моему опыту. softwarerСудя по направлению развития, прямая фича такого рода должна появиться, но пока придется извращаться, примерно так...Угу, понятно, т.е. посредством некоей новой сущности pipe, и общей оптимизации, наверное, выполняться при этом не будет. В любом случае, механизм, какой-никакой, но все-таки есть. В Informix такого не помню, хотя с того времени много чего изменилось, может и добавилось. softwarerСказанное скорее верно, хотя и с оговорками - скажем, там подразумевается, что план вычисляется для каждого запроса, в то время как переиспользование плана - основа эффективности большинства систем, в том числе, насколько мне известно, и в MSSQL. Но вопрос в выводах, которые следует сделать.Если "там", это мой текст, то совсем нет, переиспользование плана там не отрицалось, это, IMHO, несколько иная тема. Но если мы ее подняли, то тут свои проблемы. Переиспользование плана тоже не всегда оптимально. Например, если есть сомнения, что конкретные условия для одного и того же по синтаксису запроса ведут к одному и тому же оптимальному плану, то в MSSQL можно указать, что процедуру надо каждый раз перекомпилировать, а не пользоваться одним и тем же планом(но можно сделать и наоборот, т.е., не стоит напрягаться, но только для конкретных запросов). Скажем так, встречался с запросами, компиляция которых настолько превышает время выполнения, что приходится делать телодвижения, дабы избегать таких несуразностей. В том числе, переписывая запрос, вплоть до разбиения его на последовательность более простых. Разумеется, это не частое явление, но изредка бывает. А если учесть, что запросы все равно время от времени перекомпилируются, например, при изменении табличных статистик, то можно заранее подстраховаться и сделать поведение более предсказуемым. Об актуальности таких методов для Oracle судить не могу, не моя епархия. Возможно, там свои способы... softwarerПервейшая задача, которую следует решить - не потерять собственно оптимальный план из пространства возможных решений, причем не только "оптимальный на текущий момент", но и "оптимальный с учетом возможных изменений в будущем". Изменения в будущем включают в себя как изменение статистик в данных, так и изменение бизнес-логики (грубо говоря, если есть десять взаиомдействующих подпрограмм, и в одну надо внести изменение, мало кто после этого начнет анализ и редизайн остальных девяти). Для того, чтобы не потерять оптимальный план, главное - не отсечь лишнего. Надо запретить оптимизатору явно неверные решения, намекнуть на желательные и оставить максимальную свободу выбора в деталях, оценить которые программисту затруднительно. И здесь жесткое разбиение на подзапросы имхо малоудачно. Почему: позволю себе упрощенный пример. Допустим, я пишу что-нибудь типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Здесь subquery1 и subquery2 - те подзапросы, на которые Вы разбили бы большой запрос. Так вот, вполне может оказаться, что Вы совершенно правы, и A join B и D join E стоит выполнять прежде других операций, но вот C с точки зрения оптимальности стоит подсоединять самой последней. Однако! Однако C должна быть подсоенинена в первый запрос с точки зрения логики, понимания смысла этого запроса. Хинты в общем запросе дадут здесь оптимум, а разбиение ведет к неприятной коллизии, которая - если говорить о практике - скорее всего будет разрешена не в сторону эффективности.Когда такое разбиение применяется для оптимизации, то понимания запроса, IMHO, уходит на второй план. Ну и, есстественно, это может подпадать под оговорку ChAдаже при разбиении сложного запроса на подвыборки необходимо включать голову, а не делать это разбиение механически.Кроме того, если отталкиваться от Вашего запроса выше, то, вполне может быть, что такие предвыборки через WITH могут уже формироваться как внутренние рекордсеты, которые вычисляются только один раз, и уже затем включаются в общий план. Это вотчина оптимизатора, и не исключено, что он может принять и такое решение. Впрочем, это только мои предположения, которые основываются на логике поведения оптимизатора MSSQL, который вполне может сам использовать внутренние временные таблицы, если найдет это полезным. А если я создаю эти таблицы явно и буду их использовать, то это, в принципе, ничем не отличается от того, что делает сервер. softwarer ChAНасчет интерактивности не уловил, вне контекста, Ну, самый простой пример такой функциональности - "искать в найденном". То есть временная таблица формируется последовательностью команд пользователя, не просто как промежуточные данные для единственной операции. Хммм, с таким применением временных таблиц лично мне сталкиваться не приходилось. Возможно просто не встречались задачи, где бы этот способ был оправданным. В крайнем случае, для поддержки фильтрации использовалась постоянная таблица, где хранились идентификаторы записей, разнесенные по сессиям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 21:02 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель МаоПо такой схеме: Модем-брандмауэр-Сервер FreeBSD (прокси) - проборос на сервер с Win2к3. Планируется только ХП абсолютно на все действия юзера. В локалке будет 7-8 юзеров. Филиалов порядка 50. .....Но все же может, есть нечто другое для данной задачи. Выскажите свои мнения по этому поводу. Спасибо. Посмотрите в сторону технологии Cache Server Pages от Intersystems. Видел решения в аналогичной ситуации на ~30 филиалов, в филиале локальная сеть. Сопровождает 1 человек удаленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2006, 23:07 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer Мимопроходящийну а ныне, к примеру, стоимость = количество * цена, если любой из операндов NULL, то результат NULL, вполне логичен. Он логичен математически. Но нелогичен и неудобен по бизнесу, с точки зрения решения практических задач. Соглашусь с тем, что ему можно придать практический смысл, что-нибудь типа "мы покупаем 10 тонн конопли, цена еще не известна, во вьюхе запланированных расходов тоже будет null". Но... не припомню, встречал ли такое хоть когда-нибудь. это потому, что вы NULL переводите как "ноль". Переводите как "неизвестен", и все сразу станет логично с точки зрения бизнеса - цена неизвестна, значит, и расходы неизвестны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2006, 02:42 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Выбегалло softwarerСоглашусь с тем, что ему можно придать практический смысл, что-нибудь типа "мы покупаем 10 тонн конопли, цена еще не известна, это потому, что вы NULL переводите как "ноль". Переводите как "неизвестен", Хм. Так и не понял, на основании каких данных Вы сумели выдвинуть столь... смелую гипотезу о бытующем у меня переводе "null". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2006, 12:50 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChAПо поводу первого предложения, то нет, насколько мне известно, тем более в случае возврата множественных рекордсетов. Например, выполнив Может быть, я чего-то не понял, но я пока не уверен, что Ваш пример демонстрирует что-либо кроме того, что MSSQL продолжает работу после ошибки (что в общем-то и так известно). Мало того, судя по тому, что Вы возвращаете рекордсеты из одной записи, Вы не поняли, что я имел в виду. Я имел в виду следующее. Допустим, нужно вернуть выборку на 1'000'000 записей (такую большую - чтобы в дальнейших рассуждениях смело пренебречь незначимыми слагаемыми). Если просто написать select, затраты памяти в ходе операции составят 1'000'000 условных единиц в буфере результатов процедуры. Если написать create temp table / copy data / select from temp table, затраты памяти составят 1'000'000 условных единиц в tempdb (кажется, там хранятся временные таблицы?) и 1'000'000 условных единиц в буфере результатов процедуры. ChAПо поводу второго. Не совсем уловил ход мысли, не вижу связи между ODBC и временной таблицей. Тем более, что в первом случае - это память клиента, а во втором - сервера. Нет. То и другое - память сервера. ChAА где хранится временная таблица, в ОЗУ или в tempdb, - неважно, ее использование должно быть оправдано в любом случае, например, повышением общей производительности или большей предсказуемостью поведения. Давайте не уводить в сторону. "Должна быть" - отличная мысль, а вот "будет ли" - вопрос. Я сказал следующее: внедрение временной таблицы в такой ситуации заведомо приводит к накладным расходам. Привожу пример таких расходов. Оправдано ли будет такое внедрение - надо смотреть в каждом конкретном случае. Связь между "дополнительными накладными расходами" и "повышением производительности" не то чтобы безусловно... ChAЕсли она позволит выполнить какой-либо SQL-код быстрее, чем без ее использования Не надо уводить в сторону. Мы говорим о возврате этой выборки. Клиент, делающий exec proc, никакой дополнительный SQL-код не выполняет. ChAт.е. посредством некоей новой сущности pipe, Да нет, pipelined function здесь сугубо необязательна. Ту же функцию можно было бы написать без нее с тем же результатом, примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Первый вариант мне кажется чуть более удобным для восприятия, потому я его и использовал. ChAи общей оптимизации, наверное, выполняться при этом не будет. В любом случае, механизм, какой-никакой, но все-таки есть. Общей оптимизации не будет. Насчет механизма - дык собственно :) ChAпереиспользование плана там не отрицалось Не отрицалось, конечно, просто не предусматривалось. Рассуждения неявно опирались на "один parse - один/мало execute". Скажем, в ситуации "один parse - десять миллионов execute" время, потраченное на построение плана, становится намного менее важным, а вот вероятность упустить хороший план из-за разбиения на подзапросы - намного более критичной. ChA, это, IMHO, несколько иная тема. Но если мы ее подняли, то тут свои проблемы. Эту тему я пару раз здесь поднимал, но к сожалению не нашлось человека, который мог бы достаточно детально рассказать о поведении MSSQL в интересных случаях. Если Вы чувствуете в себе силы для неторопливой беседы на эту тему, наверное стоит создать отдельный топик, причем аккуратно - то есть договориться о терминологии, обменяться рассказами о том "как оно делается в нашем случае", составить список вопросов, представляющих особый интерес... ChAКогда такое разбиение применяется для оптимизации, то понимания запроса, IMHO, уходит на второй план. Если обратите внимание, я и говорю о коллизии, которая подстерегает на этом пути. Конфликте "удобного" с "оптимальным". Здесь стоит вспомнить, что речь о разбиениях зашла не просто так, а в контексте использования одной хранимкой результата другой хранимки. Здесь "удобно" - уже не просто "удобно так писать запрос", а интерфейс, публичная часть решения. Подлаживание его под физику, под реализацию - неправильно с точки зрения проектирования. ChAКроме того, если отталкиваться от Вашего запроса выше, то, вполне может быть, что такие предвыборки через WITH могут уже формироваться как внутренние рекордсеты, которые вычисляются только один раз, и уже затем включаются в общий план. Это вотчина оптимизатора, и не исключено, что он может принять и такое решение. Вы абсолютно правы, именно поэтому я привел этот пример. Оптимизатор может принять такое решение и довольно часто его принимает. Разница в том, что он не обязан его принимать. Я пишу логическую модель, пишу "удобные" подзапросы, а оптимизатор думает об эффективности. В варианте же с разбиением логика и физика оказываются однозначно увязаны, чем-то потребуется жертвовать. ChAА если я создаю эти таблицы явно и буду их использовать, то это, в принципе, ничем не отличается от того, что делает сервер. Отличается тем, что Вы вяжете оптимизатору руки, не оставляете ему выбора. ChAХммм, с таким применением временных таблиц лично мне сталкиваться не приходилось. Возможно просто не встречались задачи, где бы этот способ был оправданным. В крайнем случае, для поддержки фильтрации использовалась постоянная таблица, где хранились идентификаторы записей, разнесенные по сессиям. С описанными Вами "псевдовременными" таблицами мне приходилось сталкиваться, но имхо как раз в них минимум смысла. Я пожалуй что могу назвать две задачи для таковых: 1. Сохранение контекста к следующему сеансу того же пользователя 2. Трехзвенные извращения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2006, 14:02 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer ChAПо поводу первого предложения, то нет, насколько мне известно, тем более в случае возврата множественных рекордсетов. Например, выполнив Может быть, я чего-то не понял, но я пока не уверен, что Ваш пример демонстрирует что-либо кроме того, что MSSQL продолжает работу после ошибки (что в общем-то и так известно).Да, пожалуй, неубедительно :( Итак, снова возвращаемся к первоначальному утверждению softwarerдля передачи через ODBC результат выборки формируется целиком.Можно, конечно, воззвать к разуму, что бессмысленно и совершенно неоптимально накапливать на сервере весь рекордсет, пока не закончится выполнение запроса. Таким образом мы можем дойти до того, что практически невозможно получить выборку, объем которой превышает объем ОЗУ доступного серверу MSSQL. И вряд ли хоть один сервер RDBMS может позволить себе работать подобным образом. Понятно, что это сотрясание воздуха. Но мне совсем не хотелось размахивать здесь C-кодом, использующем ODS(Open Data Service), так как технические детали для общего понимания процесса совершенно неважны. Посему позвольте просто процитировать некоторые выдержки из книги "Inside Microsoft SQL Server 2000" Kalen DelaneyODS manages the network: it listens for new connections, cleans up failed connections, acknowledges "attentions" (cancellations of commands), coordinates threading services to SQL Server, and returns result sets, messages, and status values back to the client. SQL Server clients and the server speak a private protocol known as Tabular Data Stream (TDS). TDS is a self-describing data stream. In other words, it contains tokens that describe column names, datatypes, events (such as cancellations), and status values in the "conversation" between client and server. The server notifies the client that it is sending a result set, indicates the number of columns and datatypes of the result set, and so on—all encoded in TDS. Neither clients nor servers write directly to TDS. Instead, the open interfaces of OLE-DB, ODBC, and DB-Library at the client emit TDS using a client implementation of the Net-Library. ... After SQL Server puts result sets into a network output buffer (write buffer) that's equal in size to the configured packet size, the Net-Library dispatches the buffer to the client. The first packet is sent as soon as the network output buffer is full or, if an entire result set fits in one packet, when the batch is completed. ... In some exceptional operations (such as one that provides progress information for database dumping or provides DBCC messages), the output buffer is flushed and sent even before it is full or before the batch completes. ... SQL Server has two input buffers (read buffers) and one output buffer per client. ... Надеюсь, этой информации достаточно, чтобы согласиться с тем, что результат выборки не копится целиком, чтобы только по окончанию отослать его клиенту. Причем такое поведение не зависит от способа, которым оный получает результат, т.е., через ODBC, OLE-DB или DB-Library. softwarerЯ имел в виду следующее. Допустим, нужно вернуть выборку на 1'000'000 записей (такую большую - чтобы в дальнейших рассуждениях смело пренебречь незначимыми слагаемыми). Если просто написать select, затраты памяти в ходе операции составят 1'000'000 условных единиц в буфере результатов процедуры. Если написать create temp table / copy data / select from temp table, затраты памяти составят 1'000'000 условных единиц в tempdb (кажется, там хранятся временные таблицы?) и 1'000'000 условных единиц в буфере результатов процедуры. Исходя из вышесказанного, надеюсь понятно, что каким бы способом не заполнялась временная таблица, SELECT-ом ли, EXEC-ом ли, никакого двойного хранения в памяти миллиона строк не будет. Надеюсь, вопрос закрыт ? softwarer ChAА где хранится временная таблица, в ОЗУ или в tempdb, - неважно, ее использование должно быть оправдано в любом случае, например, повышением общей производительности или большей предсказуемостью поведения. Давайте не уводить в сторону. "Должна быть" - отличная мысль, а вот "будет ли" - вопрос. Я сказал следующее: внедрение временной таблицы в такой ситуации заведомо приводит к накладным расходам. Привожу пример таких расходов. Оправдано ли будет такое внедрение - надо смотреть в каждом конкретном случае. Связь между "дополнительными накладными расходами" и "повышением производительности" не то чтобы безусловно... ChAЕсли она позволит выполнить какой-либо SQL-код быстрее, чем без ее использования Не надо уводить в сторону. Мы говорим о возврате этой выборки. Клиент, делающий exec proc, никакой дополнительный SQL-код не выполняет.Опять момент, когда я перестаю Вас понимать. Я говорю, что нет никакой разницы, где находиться временная таблица, в памяти или в tempdb, так как если она используется, то осмысленно и c конкретной целью. А в ответ почему-то получение обвинения в уводе темы в сторону. Временная таблица - это обычная таблица, но с некоторыми оговорками, и если я говорю, что она храниться в памяти, то это не потому, что можно выбирать, где ее хранить, а потому что в памяти есть свободное место для ее хранения там целиком. Если таблицу долго не использовать, то она постепенно может быть вытеснена в tempdb на диск, если серверу не будет хватать памяти для более полезных вещей. Если она получится очень большой, то почти наверняка будет сразу вытеснена в tempdb, хотя и не полностью, в памяти останется несколько страниц, которые тоже могут быть вытеснены по "старению". Когда клиент, кто бы он ни был, снова вспомнит о ней, она начнет "подниматся" в память, в зависимости от наличия свободного места в ОЗУ, целиком или только те фрагменты о которых "вспомнили". Не надо придавать временной таблице никакого мистического смысла, сервер работает с такой таблицей почти также, как и с постоянными, включая логирование. Просто сервер при работе с tempdb, позволяет себе некоторые вольности, типа ослабления поддержки WAL, т.е., не торопится сбрасывать лог на диск, а это уже дорогого стоит. Плюс, чуть иначе, если правильно помню, выделяет страницы под создаваемые таблицы с учетом основной ее роли - хранилища временных данных. Наверняка что-то еще, это просто навскидку. softwarer ChAпереиспользование плана там не отрицалосьНе отрицалось, конечно, просто не предусматривалось. Рассуждения неявно опирались на "один parse - один/мало execute". Скажем, в ситуации "один parse - десять миллионов execute" время, потраченное на построение плана, становится намного менее важным, а вот вероятность упустить хороший план из-за разбиения на подзапросы - намного более критичной.Могу только повторить ChA, это, IMHO, несколько иная тема.Мной рассматривалась вполне конкретная ситуация, когда от разбиения можно получить выгоду и немалую. Даже в ситуации "один parse - десять миллионов execute" иногда лучше получить предсказуемый ответ в течении 10 единиц времени, чем через каждую, например, сотню вызовов с ценой 5 единиц получать задержку в 1000 единиц, которая может вызвать лавинообразный рост задержек, так как процессор в это время не простаивает, а усиленно пытается построить план. Но, IMHO, все это гипотезы и жонглирование цифрами, решение всегда принимается по месту, с активным использованием серого вещества, о чем неоднократно упоминалось выше. softwarerЭту тему я пару раз здесь поднимал, но к сожалению не нашлось человека, который мог бы достаточно детально рассказать о поведении MSSQL в интересных случаях. Если Вы чувствуете в себе силы для неторопливой беседы на эту тему, наверное стоит создать отдельный топик, причем аккуратно - то есть договориться о терминологии, обменяться рассказами о том "как оно делается в нашем случае", составить список вопросов, представляющих особый интерес...Если честно, то у меня начинается очередно насыщенный период, боюсь, я просто не в состоянии буду уделять много времени в ближайшее время. Даже сейчас я "ворую" рабочее время :) Так что неторопливая беседа может, более чем сильно, затянуться. Особенно, если "размахиваться" как сейчас, килобайтами. Было бы намного проще, короткий вопрос - короткий ответ, но, к сожалению, между нашими платформами столь глубокие различия, что такой вариант вряд ли пройдет. softwarerЗдесь стоит вспомнить, что речь о разбиениях зашла не просто так, а в контексте использования одной хранимкой результата другой хранимки. Здесь "удобно" - уже не просто "удобно так писать запрос", а интерфейс, публичная часть решения. Подлаживание его под физику, под реализацию - неправильно с точки зрения проектирования. С этим согласен полностью. В этом смысле можно было бы сделать и поизящнее, чем это присутствует в MSSQL(2000) сейчас, включая ограничения на вставку через EXEC, а у OPENQUERY свои заморочки. softwarer ChAА если я создаю эти таблицы явно и буду их использовать, то это, в принципе, ничем не отличается от того, что делает сервер.Отличается тем, что Вы вяжете оптимизатору руки, не оставляете ему выбора.Так в этом и состояла моя цель, нефиг ему гадать, я лучше знаю, как здесь поступить и готов платить за это, в том числе, потерей "прозрачности" кода и беря на себя ответственность за последствия. Возможно в Oracle оптимизатор никогда не принимает неверных решений. MSSQL же может делать "промашки", на это влияет очень много факторов. И в этом даже синтаксис может сыграть свою роль, например, лишнее условие, которое оптимизатор будет должен учесть, или лишнее поле в результате, которое нужно там не больше, чем собаке пятая нога. Согласен, что хотелось бы идеала, но разработчики БД сплошь и рядом вынуждены учитывать "физику", а не только концептуальную модель. Попробуйте оставить таблицы без индексов, результат может превзойти все ожидания :) Впрочем, Вам об этом рассказывать не имеет смысла, Вы и сами можете многое рассказать, насколько понимаю. softwarerС описанными Вами "псевдовременными" таблицами мне приходилось сталкиваться, но имхо как раз в них минимум смысла. Я пожалуй что могу назвать две задачи для таковых: 1. Сохранение контекста к следующему сеансу того же пользователя 2. Трехзвенные извращения.Ни то, и ни другое. Именно рекурсивная пользовательская фильтрация. Он делает по условиям одну выборку, потом из нее другую, разумеется, через соответствующий интерфейс, потом эта выборка передается на массовую обработку, в том числе - внутренним языком. В принципе, можно было бы реализовать ту же функциональность через временные таблицы, но это было сложнее для реализации на клиенте, если правильно помню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 04:32 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChAПосему позвольте просто процитировать некоторые выдержки из книги "Inside Microsoft SQL Server 2000" Спасибо, интересно. Перед продолжением основной темы было бы интересно узнать еще одну важную деталь: как именно синхронизируются передача данных клиенту с работой продолжающей гнать данные ХП? Кто и что делает в момент, когда единственный выходной буфер заполнен? ChAОпять момент, когда я перестаю Вас понимать. Давайте напомню. Этот фрагмент беседы пошел с фразы о том, что если процедура возвращает ref cursor, этот рекордсет может быть использован как клиентом, так и другой серверной ХП, в то время как в MSSQL придется выбирать - то ли "неявный рекордсет", который может быть принят клиентом, то ли курсор, который можно передать в другую ХП. Вы предложили возвращать временную таблицу, которая доступна и так, и эдак. Я постулировал то, что обсуждаем выше - дополнительные накладные расходы. И вот здесь появилась мысль насчет разбивок и ситуаций, когда разбивка приводит к повышению эффективности. Так вот, по-моему это уже не имеет особого отношения к изначально заданной теме о двойном использовании, о чем я и говорю. Что касается вытеснения временной таблицы на диск - оно понятно. Я не упоминаю этот вариант из-за контекста "накладных расходов" - если временная таблица вытесняется на диск перед возвратом клиенту, это уже большие дополнительные расходы по сравнению с "неявным рекордсетом", лишние чтение-запись. Поэтому для сравнения я сосредоточился на варианте, где таких расходов нет, выборка остается целиком в ОЗУ. ChAНе надо придавать временной таблице никакого мистического смысла Дык никто и не придает. ChAМогу только повторить, это, IMHO, несколько иная тема. Несколько иная. Я об этом говорю только как объяснение того, почему я не то чтобы полностью согласен с Вашей аргументацией о полезности разбиения. ChAТак в этом и состояла моя цель, нефиг ему гадать, я лучше знаю, как здесь поступить и готов платить за это, в том числе, потерей "прозрачности" кода и беря на себя ответственность за последствия. Я знаком с такой позицией и могу повторить то, с чего начал: я сомневаюсь в оптимальности такого подхода. Я с некоторыми ограничениями верю в Вашу способность придумать наилучший план в данных текущих условиях, но я абсолютно уверен, что в ходе эксплуатации ИС оптимальный план одного и того же запроса меняется, и "я лучше знаю" становится тормозом. Повторю еще раз основную мысль, с которой я начал весь разговор об оптимизации: для уменьшения пространства решений нужно отвадить оптимизатор от явно неверных решений и дать ему выбирать между "хорошими" и "еще более лучшими". Ну а жестко рубить - это отличный способ потерять оптимальный план и довольствоваться "лучшим из худших". ChAВозможно в Oracle оптимизатор никогда не принимает неверных решений. Принимает. Но программисты, считающие себя умнее оптимизатора, принимают такие решения гораздо чаще. Поэтому я однозначно за "мягкие" решения. ChAНи то, и ни другое. Именно рекурсивная пользовательская фильтрация. ... Не готов оценить "удобство реализации на клиенте". Мне кажется, в этом случае: 1. Необходима механика уборки мусора 2. Необходимо всюду пихать "and session_id = :my_session_id" 3. Накладные расходы на отношение к временной по сути таблице как к постоянной Здесь я предполагаю, что механизм длинной транзакции с итоговым rollback-ом неприменим - поправьте, если я ошибаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 12:50 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer, Вы несколько категоричны в суждениях (насчет временных таблиц(ВТ)) Я прекрасно понимаю чего хочет сказать ChA и у меня создаётся такое ощущение что Вы всеми силами пытаетесь объяснить ему что он делает неправильно. Надеюсь мы не будем похожи на упёртых кашистов если я скажу что надо везде учитывать свою специфику. Обычно ВТ используют там где выборки данных небольшие и эти данные в любом случае надо как-то полностью прочитать. Т.е. да, по ВТ будет скан - но во-первых эта таблица небольшая, а во-вторых он эти данные в таком же размере всё равно бы выбирались бы из других таблиц. Для примера приведу свой триггер на изменени таблицы остатков после вставки проводки(для постоты выкинуты все проверки). Код: 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. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. Т.е. я сначала сгруппированные изменяемые данные(из псевдо-таблиц inserted и deleted) вставляю во временную таблицу(@accstm_p - таблица-переменная, по сути тоже самое). Далее внутри самой таблицы далаем последовательно 2 апдейта. И в конце с помощью ВТ обновляем 4 раза постоянные таблицы. Наверное это можно как-то было сделать и без ВТ(я правда не знаю как) - но это было бы на порядок сложнее и не факт что работало бы быстрее. В данном случае я знаю что вставляемых проводок будет немного (вставляется либо один документ с не более чем десятком проводок, либо удаляется небольшое число документов) и сознательно иду на постоянный скан ВТ. Ни и основное применение ВТ - конечно в отчетах. Когда надо в одной таблице собрать данные из 18 мест и сделать специфические группировки - я не представляю как это сделать одним запросом, даже если бы были with и connect by Хотя я не исключаю что несколько испорчен ВТ: на 4-й и 6.5 версиях оптимизатор был очень плохонький и многие запросы работали гораздо быстрее через ВТ, на 2000-м такое встречается гораздо реже(с 7-й версией почти не работал), из нкоторых мест я их даже выкидывал. Резюме: всякой вещи можно найти достойное применение если применять с умом, а отвергать с ходу не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 15:13 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSupersoftwarer, Вы несколько категоричны в суждениях (насчет временных таблиц(ВТ)) Может быть, хотя имхо не замечаю. Я просто стремлюсь избежать обсуждения нечетких вопросов, того же вытеснения на диск, и свести к довольно очевидным утверждениям. Скажем, для меня очевидно, что грамотная реализация временной таблицы эффективнее в применении, чем грамотная реализация постоянной, используемой как временной. Почему - потому что у временной не надо заботиться о блокировках, восстановлении после сбоев, а в случае on commit delete rows временной таблицы - еще и об откатах. SergSuperЯ прекрасно понимаю чего хочет сказать ChA и у меня создаётся такое ощущение что Вы всеми силами пытаетесь объяснить ему что он делает неправильно. Полным понимаем ChA я похвастаться не могу, что выявилось в этом топике. Что ChA делает неправильно - если честно, меня как-то не волнует. Мне интересно обсудить некоторые вещи и возможно узнать нечто мне неизвестное - например, если ChA ответит на заданный вопрос то, что я полагаю, я пойму, откуда у трехзвенщиков появился аргумент про желательность быстрой прокачки данных с сервера БД на СП. SergSuperесли я скажу что надо везде учитывать свою специфику. Само собой, полностью разделяю. И у меня такое ощущение, что Вы приписываете мне некую "атаку на временные таблицы вообще". Такого нет, я говорю всего лишь об одной конкретной теме - их использовании для возврата результатов из ХП. Ну и отпочковавшаяся отсюда тема о разбиении больших запросов. SergSuperНи и основное применение ВТ - конечно в отчетах. Когда надо в одной таблице собрать данные из 18 мест и сделать специфические группировки - я не представляю как это сделать одним запросом, даже если бы были with и connect by Скажу так, мне хватило опыта работы с Oracle Warehouse Builder, чтобы понять, что практически все на свете можно сделать одним запросом :) Подчеркну - я совершенно нигде не собираюсь настаивать на том, что все и всегда следует делать именно так. Хотя бы с точки зрения сопровождения таких запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 15:49 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
о как ловко говорим о временных таблицах, а в коде табличная переменная. надеюсь вы понимаете какой эфект вызвовит использование временной таблицы в вашем коде ? ну и вообще отличие транзакционно-независимой табличной переменной от временной переменной ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 15:54 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!!о как ловко говорим о временных таблицах, а в коде табличная переменная. надеюсь вы понимаете какой эфект вызвовит использование временной таблицы в вашем коде ? ну и вообще отличие транзакционно-независимой табличной переменной от временной переменной ? отлично понимаю, разница в данном случае несущественна - не те объёмы, чтоб транзакционно-независимость сказывалась до 2000-го у меня там была таблица с #, но раз рекомендуют использовать переменные - переделал да и обман эти табличные переменные - если объявляется табличная переменная, то в tempdb всё равно создаётся временная таблица суть в общем не в этом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 16:18 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarerСкажу так, мне хватило опыта работы с Oracle Warehouse Builder, чтобы понять, что практически все на свете можно сделать одним запросом :) Подчеркну - я совершенно нигде не собираюсь настаивать на том, что все и всегда следует делать именно так. Хотя бы с точки зрения сопровождения таких запросов. Вот конкретный пример, только что делал. Надо сделать отчет о приросте имущества. Но в рублях. Т.е. копейки надо округлить. Некоторые счета должны быть округлены по правилам, некоторые имеют промежуточную сумму и именна она должна быть округлена по правилам(т.к. есть в других отчетах), а по остальным ошибку округления надо равномерно раскидать - делается это итерационным методом. Ну никак тут одним запросом. И таких отчетов - практически все кстати а если написать на Оракле такую процедуру: create proc X as select * from SomeTbl он выдаст ошибку при компиляции? если нет - то этот select куда-то пойдёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 16:32 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuper суть в общем не в этом суть именно в этом, ваш код с ВТ работал скорее всего всего лишь из-за низкой загрузки: во первых конструкция insert into #t select блокирует системные таблицы на время всего запроса, т.е. вы просто выставили всех юзеров в очередь, во вторых ВТ вызывает перекомпиляцию сторед процедур, что опять же вызывает ненужный оверхед. именно поэтому МС рекомендует везде где возможно отказатся от ВТ в пользу табличных переменных, которые также вызывают проблемы с перекомпиляцией. http://support.microsoft.com/default.aspx?scid=kb;en-us;305977 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 16:33 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuperВот конкретный пример, только что делал. Надо сделать отчет о приросте имущества. Но в рублях. Т.е. копейки надо округлить. Некоторые счета должны быть округлены по правилам, некоторые имеют промежуточную сумму и именна она должна быть округлена по правилам(т.к. есть в других отчетах), а по остальным ошибку округления надо равномерно раскидать - делается это итерационным методом. Ну никак тут одним запросом. Пока что я не увидел ничего, что не делается одним запросом. Хотя согласен с тем, что запрос может оказаться "слишком сложным" итп. SergSuperкстати а если написать на Оракле такую процедуру: create proc X as select * from SomeTbl он выдаст ошибку при компиляции? если нет - то этот select куда-то пойдёт? Ээ.... не понял, куда должен пойти этот селект, но пойдет он в баню :) Если Вы имеете в виду параметризованные view, то их к сожалению пока нет, ждем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 16:37 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!!, я работал с MS SQL еще на 4-й версии - ну не надо мне ссылки на доки кидать insert into #t select не блокирует системные таблицы, блокировал когда-то select * into #t from (создание таблицы и её заполнение тут же), в 7-м (или 2000-м) это исправили, даже если бы блокировал - не все юзеры бы в очереди стояли, а только те кто захотел бы создать таблицу (временную в т.ч.) или еще какой объект еще раз повторю - не в этом суть, я имел ввиду то, что касается работы оптимизатора softwarer Ээ.... не понял, куда должен пойти этот селект, но пойдет он в баню ну например для MS SQL оба запроса вернут тоже самое Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 17:07 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuperну например для MS SQL оба запроса вернут тоже самое Если я правильно понимаю то, что Вы написали, Вы делаете процедуру из единственной строки-селекта с неявным возвращаемым рекордсетом. Как мы тут выясняем N страниц, в Oracle для этого используется ref cursor, написанное Вами просто не соответствует никакой синтаксической конструкции языка. При попытке компиляции такого, думаю, компилятор скажет, что не согласен воспринять SELECT там, где ожидал бы увидеть BEGIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 17:20 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarerкак именно синхронизируются передача данных клиенту с работой продолжающей гнать данные ХП? Кто и что делает в момент, когда единственный выходной буфер заполнен? Может Вам просто переслать эту книгу, чем ее цитировать ? Там очень много про внутреннюю жизнь MSSQL. Оттуда жеSQL Server has two input buffers (read buffers) and one output buffer per client. Double-buffering is needed for the reads because while SQL Server reads a stream of data from the client connection, it must also look for a possible attention. (This allows that "Query That Ate Cleveland" to be canceled directly from the issuer. Although the ability to cancel a request is extremely important, it's relatively unusual among client/server products.) Attentions can be thought of as "out-of-band" data, although they can be sent with network protocols that do not explicitly have an out-of-band channel. The SQL Server development team experimented with double-buffering and asynchronous techniques for the output buffers, but these didn't improve performance substantially. The single network output buffer works nicely. Even though the writes are not posted asynchronously, SQL Server doesn't need to bypass the operating system caching for these as it does for writes to disk. Because the operating system provides caching of network writes, write operations appear to complete immediately with no significant latency. If, however, several writes are issued to the same client and the client is not currently reading data from the network, the network cache eventually becomes full and the write blocks. This is essentially a throttle. As long as the client application is processing results, SQL Server has a few buffers queued up and ready for the client connection to process. But if the client's queue is already stacked up with results and is not processing them, SQL Server stalls sending them and the network write operation to that connection has to wait. Since the server has only one output buffer per client, data cannot be sent to that client connection until it reads information off the network to free up room for the write to complete. (Writes to other client connections are not held up, however; only those for the laggard client are affected.) Stalled network writes can also affect locks. For example, if READ COMMITTED isolation is in effect (the default), a share lock can normally be released after SQL Server has completed its scan of that page of data. (Exclusive locks used for changing data must always be held until the end of the transaction to ensure that the changes can be rolled back.) However, if the scan finds more qualifying data and the output buffer is not free, the scan stalls. When the previous network write completes, the output buffer becomes available and the scan resumes. But as I stated earlier, that write won't complete until the client connection "drains" (reads) some data to free up some room in the pipe (the virtual circuit between SQL Server and client connection). If a client connection delays processing results that are sent to it, concurrency issues can result because locks are held longer than they otherwise would be. A kind of chain reaction occurs: if the client connection has not read several outstanding network packets, further writing of the output buffer at the SQL Server side must wait because the pipe is full. Since the output buffer is not available, the scan for data might also be suspended because no space is available to add qualifying rows. Since the scan is held up, any lock on the data cannot be released. In short, if a client application does not process results in a timely manner, database concurrency can suffer. The size of the network output buffer can also affect the speed at which the client receives the first result set. As mentioned earlier, the output buffer is sent when the batch, not simply the command, is done, even if the buffer is not full. If two queries exist in the same batch and the first query has only a small amount of data, its results are not sent back to the client until the second query is done or has supplied enough data to fill the output buffer. If both queries are fast, waiting for both queries to finish is not a problem. But suppose the first query is fast and the second is slow. And suppose the first query returns 1000 bytes of data. If the network packet size is 4096 bytes, the first result set must wait in the output buffer for the second query to fill it. The obvious solution here is to either make the first command its own batch or make the network packet size smaller. The first solution is probably best in this case, since it is typically difficult to fine-tune your application to determine the best buffer size for each command. But this doesn't mean that each command should be its own batch. Quite the contrary. In fact, under normal circumstances, grouping multiple commands into a single batch is most efficient and is recommended because it reduces the amount of handshaking that must occur between client and server. softwarerЭтот фрагмент беседы пошел с фразы о том, что если процедура возвращает ref cursor, этот рекордсет может быть использован как клиентом, так и другой серверной ХП, в то время как в MSSQL придется выбирать - то ли "неявный рекордсет", который может быть принят клиентом, то ли курсор, который можно передать в другую ХП. Вы предложили возвращать временную таблицу, которая доступна и так, и эдак. Я постулировал то, что обсуждаем выше - дополнительные накладные расходы.Если Вы про это ChAпроцедура для возврата данных в вызывающую процедуру или клиенту может быть одна и та же, просто в вызывающей процедуре придется делать возврат рекордсета во временную таблицу или через OPENQUERY, хотя в случае множественных результатов могут быть проблемы.То здесь говорится совсем не то. Речь только о том, что процедура одна, например Код: plaintext 1. 2. 3. 4. 5. Код: plaintext Код: plaintext 1. 2. Код: plaintext 1. В конце концов, в некоторых ситуациях, когда вы в процедуре только читаете данные, по примеру выше, то можно использовать табличные функции, которые возвращают рекордсет. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. softwarerя абсолютно уверен, что в ходе эксплуатации ИС оптимальный план одного и того же запроса меняется, и "я лучше знаю" становится тормозом.Говоря Вашими же словами - "может стать", но не обязательно становится. Дальнейшее обсуждение этого нюанса, IMHO, бесперспективно. Давайте закончим его обсуждение на том, что зафиксируем разность наших позиций. softwarerдля уменьшения пространства решений нужно отвадить оптимизатор от явно неверных решений и дать ему выбирать между "хорошими" и "еще более лучшими". Ну а жестко рубить - это отличный способ потерять оптимальный план и довольствоваться "лучшим из худших". Кстати, хорошо, что Вы снова вернулись к этой мысли. Мне хотелось бы понять, как можно "отвадить оптимизатор от явно неверных решений". Как пнуть его в нужную сторону, я понимаю, а вот как отвадить - нет, или не понимаю, что именно Вы имеете в виду под "отвадить". softwarerжестко рубить - это отличный способ потерять оптимальный план и довольствоваться "лучшим из худших".Похоже здесь тоже стоит зафиксировать разность наших позиций. Напомню, я против чересчур навязчивого управление оптимизатором через хинты, но есть ситуации, когда без них его поведение становится нежелательным, как правило, это сложные запросы, а не тривиальное слияние пары-тройки таблиц. И если я не найду других способов вернуть его поведение к более адекватному, то я воспользуюсь хинтами. softwarerНо программисты, считающие себя умнее оптимизатора, принимают такие решения гораздо чаще. Поэтому я однозначно за "мягкие" решения.По этому вопросу полностью "за", была бы возможность, я строжайше запрещал бы пользоваться хинтами, пока опыт разработчик БД на конкретной платформе меньше года, как минимум. softwarerНе готов оценить "удобство реализации на клиенте". Мне кажется, в этом случае: 1. Необходима механика уборки мусора 2. Необходимо всюду пихать "and session_id = :my_session_id" 3. Накладные расходы на отношение к временной по сути таблице как к постоянной Здесь я предполагаю, что механизм длинной транзакции с итоговым rollback-ом неприменим - поправьте, если я ошибаюсь.В случае "псевдовременной": 1. Да, хотя не особо актуально, если добавить идентификатор фильтра. 2. Если доступ через view, то нет, пользователь работает в своей "песочнице". 3. Да, нет, собственно. Вы похоже опять почему-то считаете, что это большие расходы. 4. Длинные транзакции вполне допустимы, с учетом подхода в пункте 2, хотя смысл в длинных транзакциях просто отсутствует. Yo.!!http://support.microsoft.com/default.aspx?scid=kb;en-us;305977 Блин, он опять вытащил этот старый жупел :( Это уже просто патология какая-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 18:22 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Председатель Мао С точки зрения стоимости владения MS дешевле будет (лицензия дешевле+ специалист в принципе дешевлеИсходя из опыта, специалист определенной квалификации на MSSQL, занимающийся какой-то задачей - стоит столько же сколько и его коллега на Оракл с аналогичной квалификацией занимающийся подобной задачей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 00:20 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!!2Председатель Мао попробуйте осознать одну вещь - pl/sql это язык вырсший из ады (кажется), T-SQL из mssql2k это просто процедурное расширение языка SQL, нет наймспеса (schema/package), нет эксепшенов, там масивов и прочих элементарных атрибутов языка ... но для студента - согласен, проще выучить пару конструкций и в перед. MS SQL2k5, с эксепшенами, с встроенный обходом деревьев и т.п. - вышел год назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 00:23 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
andsm Yo.!!2Председатель Мао попробуйте осознать одну вещь - pl/sql это язык вырсший из ады (кажется), T-SQL из mssql2k это просто процедурное расширение языка SQL, нет наймспеса (schema/package), нет эксепшенов, там масивов и прочих элементарных атрибутов языка ... но для студента - согласен, проще выучить пару конструкций и в перед. MS SQL2k5, с эксепшенами, с встроенный обходом деревьев и т.п. - вышел год назад. Тока вот жалка пакеты до сих пор в и т.п. не входють :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 08:06 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuperYo.!!, я работал с MS SQL еще на 4-й версии - ну не надо мне ссылки на доки кидать insert into #t select не блокирует системные таблицы, блокировал когда-то select * into #t from (создание таблицы и её заполнение тут же), в 7-м (или 2000-м) это исправили, даже если бы блокировал - не все юзеры бы в очереди стояли, а только те кто захотел бы создать таблицу (временную в т.ч.) или еще какой объект кто сказал исправили ? совсем недавно мы тут с кем-то проверяли на mssql2k5 косяк отлично работает. 2andsm Мао сравнивал pl/sql 9ки и t-sql sql2k ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 12:18 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
С разделение понятия USER и SCHEMA это, на мой взгляд, уже не так страшно. Можно просто использовать схемы для группировки объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 12:27 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
если это про пакеты - то они НЕ ТОЛЬКО группировка объектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 12:38 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChAМожет Вам просто переслать эту книгу, чем ее цитировать ? Там очень много про внутреннюю жизнь MSSQL. Хм. Не помешает, конечно, хотя сами понимаете - найти в незнакомой большой книге нужное является отдельным искусством. Адрес в профиле. Оттуда жеIf a client connection delays processing results that are sent to it, concurrency issues can result because locks are held longer than they otherwise would be. A kind of chain reaction occurs: if the client connection has not read several outstanding network packets, further writing of the output buffer at the SQL Server side must wait because the pipe is full. Since the output buffer is not available, the scan for data might also be suspended because no space is available to add qualifying rows. Since the scan is held up, any lock on the data cannot be released. In short, if a client application does not process results in a timely manner, database concurrency can suffer. Ага. Вот этого я ожидал после предыдущего письма. Виноват, гипотеза насчет накопления данных на сервере была вызвана предположением, что уж вышеописанным-то образом делать не станут. Что ж, так действительно становятся понятнее некоторые странные ранее аргументы трехзвенщиков. Прошу прощения за неверное предположение, не ожидал, что архитекторы MSSQL допустят такую зависимость. ChAФактически, это view c параметром, и при включении его в другой запрос, он раскрывается для оптимизатора Да, это очень приятная фича. Единственно я не понимаю, почему оно называется "функцией" :) ChAГоворя Вашими же словами - "может стать", но не обязательно становится. Безусловно, для каждого отдельного запроса - "может стать". Мне следовало выразиться четче, примерно так: из многих "может стать" некоторые наверняка станут. ChAМне хотелось бы понять, как можно "отвадить оптимизатор от явно неверных решений". Как пнуть его в нужную сторону, я понимаю, а вот как отвадить - нет, или не понимаю, что именно Вы имеете в виду под "отвадить". Зависит от. Прежде всего, в Oracle хватает хинтов со смыслом "вот здесь вот этого не делать". Есть и другие моменты - например, оптимизатор может принимать неверное решение из-за отсутствия информации о количестве строк во временной таблице или в результате табличной функции, и здесь хинт cardinality, не запрещая оптимизатору выбирать оптимальный путь, исправит ситуацию. ChAНапомню, я против чересчур навязчивого управление оптимизатором через хинты, но есть ситуации, когда без них его поведение становится нежелательным, как правило, это сложные запросы, а не тривиальное слияние пары-тройки таблиц. И если я не найду других способов вернуть его поведение к более адекватному, то я воспользуюсь хинтами. Напомню, я в данном случае не возражаю против хинтов (хотя конечно по-разному отношусь к разным хинтам и их уместности). Мы вроде бы говорили о жестком разбиении запроса на подзапросы. ChA1. Да, хотя не особо актуально, если добавить идентификатор фильтра. Ээ.. не понял. Либо мы убираем мусор, либо он потихоньку забивает таблицу. Третьего варианта я не вижу. ChA2. Если доступ через view, то нет, пользователь работает в своей "песочнице". Признаться, не доводилось слышать, чтобы где-нибудь был реализован параметризованный updateable view. ChA3. Да, нет, собственно. Вы похоже опять почему-то считаете, что это большие расходы. Да, я полагаю накладные расходы на работу с временными таблицами меньшими, нежели с постоянными. Данные во временных таблицах не обязаны пережить падение сервера, а следовательно нет потребности постоянно дергать диск. Данные разных сессий не путаются между блоками/страницами, нет необходимости выставлять-поддерживать-проверять блокировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 13:04 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!!кто сказал исправили ? совсем недавно мы тут с кем-то проверяли на mssql2k5 косяк отлично работает. Yo.!!, блин, ну надо же так разочаровать, а вот я до этого серьёзно относился к Вашим словам. Теперь не буду. Зачем писать о том, в чем Вы не разбираетесь и слышали краем уха? Ну это еще ладно, но врать то зачем? Интересно, косяк Вы(а точнее кто-то с кем Вы якобы проверяли) умудрились найти на какой конструкции: на insert into #t select(как считали недавно) или select * into #t? Вы хоть представляете причины такой блокировки? При создании любой таблицы происходит вставка записи о ней в системную таблицу sysobjects. В версиях 6.5 и раньше вставка в таблицу блокировала последующие вставки в неё. Поскольку отдельный оператор - это отдельная транзакция, а select * into #t создаёт таблицу, то на время этой транзакции sysobjects была заблокирована, а транзакция длилась пока этот select шел. В 7-й версии уже появилась неблокирующая вставка в таблицу и таких косяков не было. Специально сейчас проверил на 2000-м - не блокирует. 2005-го у меня нет, но уверен что и там не будет. softwarer ChA Фактически, это view c параметром, и при включении его в другой запрос, он раскрывается для оптимизатора Да, это очень приятная фича. Единственно я не понимаю, почему оно называется "функцией" :) Есть еще т.н. табличная функция - типа процедуры, но модифицировать она может внутри себя только таблицы-переменные (т.е. можно делать внутренние промежуточные вычисления) и можно делать select из этой функции. Поскольку по синтаксису они довольно похожи - то и назвали функцией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 14:31 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
SergSuper Yo.!!, блин, ну надо же так разочаровать, а вот я до этого серьёзно относился к Вашим словам. Теперь не буду. Зачем писать о том, в чем Вы не разбираетесь и слышали краем уха? Ну это еще ладно, но врать то зачем? пока еще Yo! на откровенной лаже никто не ловил ;) SergSuper При создании любой таблицы происходит вставка записи о ней в системную таблицу sysobjects. В версиях 6.5 и раньше вставка в таблицу блокировала последующие вставки в неё. Поскольку отдельный оператор - это отдельная транзакция, а select * into #t создаёт таблицу, то на время этой транзакции sysobjects была заблокирована, а транзакция длилась пока этот select шел. В 7-й версии уже появилась неблокирующая вставка в таблицу и таких косяков не было. Специально сейчас проверил на 2000-м - не блокирует. 2005-го у меня нет, но уверен что и там не будет. ну давайте вместе читать о чем я вам толкую "конструкция insert into #t select блокирует системные таблицы на время всего запроса ", разницу между запросом и транзакцией надеюсь чуете ? а что вы там тестировали ? я не утверждал, что лок поставится на всю транзакцию, я говорил о запросе т.е. на время "insert into #t select" уверен что на "select * into #t" вылезет тот же косяк, т.к. проблема в том, что локи выставляются на время создания таблицы. ЗЫ. интересно, что майкрософт до сих пор утверждает , что лок в sql2k ставится на всю транзакцию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 19:47 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Привет, Yo.!!! Ты пишешь: Yo.!!Y> пока еще Yo! на откровенной лаже никто не ловил ;) ну, если Yo!, Yo!! и Yo.!! - разные люди, то тогда конечно... -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 19:51 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!!пока еще Yo! на откровенной лаже никто не ловил ;) Вспомнился анекдот про вратаря-армянина Один тренер создал футбольную команду которая всех обыгрывала, и бразильцев, и немцев... Его спрашивают как он это сделал? Тренер отвечает: -В нападение поставил чеченцев - от них трудно отбиться, в полузащиту грузин - с ними трудно договориться, в защиту азербайджанцев - пока не заплатишь не пройдешь, а в ворота армянина - даже если забьешь гол, не докажешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 22:29 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий Привет, Yo.!!! Ты пишешь: Yo.!!Y> пока еще Yo! на откровенной лаже никто не ловил ;) ну, если Yo!, Yo!! и Yo.!! - разные люди, то тогда конечно... -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 Мне кажется это один человек, причем откуда-то из Украины ключевое слово "чуете" неоднакратно упоминается в его различных постах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 22:39 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
2Мимопроходящий url с отковенной лаже в студию :) тока чур в отдельной ветке. 2Председатель Мао естественно один человек, но не с украины. к стате ходящий нельзя бы поудалять придурков зарегистрированых с моим именем Yo! и Yo!! и возвернуть мне доброе имя :) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 23:03 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer Оттуда жеIf a client connection delays processing results that are sent to it, concurrency issues can result because locks are held longer than they otherwise would be. A kind of chain reaction occurs: if the client connection has not read several outstanding network packets, further writing of the output buffer at the SQL Server side must wait because the pipe is full. Since the output buffer is not available, the scan for data might also be suspended because no space is available to add qualifying rows. Since the scan is held up, any lock on the data cannot be released. In short, if a client application does not process results in a timely manner, database concurrency can suffer. Ага. Вот этого я ожидал после предыдущего письма. Виноват, гипотеза насчет накопления данных на сервере была вызвана предположением, что уж вышеописанным-то образом делать не станут. Что ж, так действительно становятся понятнее некоторые странные ранее аргументы трехзвенщиков. Прошу прощения за неверное предположение, не ожидал, что архитекторы MSSQL допустят такую зависимость.Я делаю правильный вывод из Вашей фразы, что накапливают - плохо и не накапливают - тоже плохо ? Что есть тогда хорошо ? Или, лучше, как поступает Oracle ? Можно цитату на аналогичную тему из документации ? И, кстати, давайте не будем трогать трехзвенщиков в контексте нашего обсуждения ? Это совершенно отдельная и большая тема. И не думаю, что они работают только на платформе MSSQL и только поэтому используют то, что Вы называете "странными аргументами". Так что предлагаю закрыть пока эту нить. softwarer ChAГоворя Вашими же словами - "может стать", но не обязательно становится. Безусловно, для каждого отдельного запроса - "может стать". Мне следовало выразиться четче, примерно так: из многих "может стать" некоторые наверняка станут.Предлагаю эту нить обсуждения также завершить. Ничего нового для себя мы из нее не выясним. softwarer ChAМне хотелось бы понять, как можно "отвадить оптимизатор от явно неверных решений". Как пнуть его в нужную сторону, я понимаю, а вот как отвадить - нет, или не понимаю, что именно Вы имеете в виду под "отвадить".в Oracle хватает хинтов со смыслом "вот здесь вот этого не делать".Хотя бы парочку примеров таких запретительных хинтов с кратким пояснением можете привести ? В MSSQL(2000) ничего похожего нет, либо я не в курсе. softwarerнапример, оптимизатор может принимать неверное решение из-за отсутствия информации о количестве строк во временной таблице или в результате табличной функции, и здесь хинт cardinality, не запрещая оптимизатору выбирать оптимальный путь, исправит ситуацию.В Oracle есть временные таблицы и табличные функции ? Или подразумевается MSSQL ? Если второе, то статистика как по временной таблице так и по табличной функции, в общем случае, существует, во втором случае - косвенно, через раскрытие функции оптимизатором до базовых таблиц. Хинт cardinality отсутствует, и не то, чтобы было сильно жаль, но его наличие могло бы быть полезным в определенных случаях. Таких хинтов, насколько понимаю, в Oracle на порядок больше, чем у MSSQL, что в значительной степени сложилось, как предполагаю, исторически. Когда оптимизатор был еще не очень качественным и требовалось много подсказок, чтобы он либо шел, либо не шел в заданном направлении. Большинство из них наверняка сейчас выглядят анахронизмом, так как оптимизатор и так вполне справляется в большинстве случаев. softwarer ChAИ если я не найду других способов вернуть его поведение к более адекватному, то я воспользуюсь хинтами. Напомню, я в данном случае не возражаю против хинтов (хотя конечно по-разному отношусь к разным хинтам и их уместности). Мы вроде бы говорили о жестком разбиении запроса на подзапросы.В некотором смысле это тоже хинт. Более того, я знаю, как в некоторых ситуациях хинтами добиваться использования оптимизатором внутренних временных таблиц. Можно также считать, что это своеобразный хинт "наоборот" о котором Вы поминали в Oracle, я явно говорю оптимизатору, что туда ходить не надо, пусть и таким своеобразным способом. На всякий, еще раз процитирую ChAкоторый вполне может сам использовать внутренние временные таблицы, если найдет это полезным. А если я создаю эти таблицы явно и буду их использовать, то это, в принципе, ничем не отличается от того, что делает сервер.Как следствие, сервер будет терять гораздо меньше времени на построение или перестройку плана в следующий раз. И вызвано это следующим ChAвстречался с запросами, компиляция которых настолько превышает время выполнения, что приходится делать телодвижения, дабы избегать таких несуразностей. В том числе, переписывая запрос, вплоть до разбиения его на последовательность более простых. Разумеется, это не частое явление, но изредка бывает . А если учесть, что запросы все равно время от времени перекомпилируются, например, при изменении табличных статистик, то можно заранее подстраховаться и сделать поведение более предсказуемым.Прошу обратить внимание на подчеркнутую фразу и не считать это постоянной практикой, так же как наличие хинтов не подразумевает их обязательного использования. Но если мы идем определенным путем, то он выбран в здравом уме и твердой памяти, с четким осознанием последствий, о чем упоминается уже не в первый раз. Патологические случаи предлагаю не рассматривать. Возможно, в Oracle все гораздо лучше и при любых условиях хинты не используются, либо - невероятно редко, а запросы никогда не упрощаются разбиением на подвыборки, какими бы сложными они не были. Ну, тогда остальным придется только завидовать. softwarer ChA1. Да, хотя не особо актуально, если добавить идентификатор фильтра. Ээ.. не понял. Либо мы убираем мусор, либо он потихоньку забивает таблицу. Третьего варианта я не вижу.Я, по моему, согласился, что он необходим, разве нет ? Просто отсутствует необходимость сразу же все удалять, а можно отложить этот процесс на окончание текущей или начало следующей сессии, либо время от времени устраивать чистку от "мусора" хоть на основе расписаний, хоть степени активности. В принципе, я лично, за использование временных таблиц в подобной ситуации, но такой подход сложился отчасти по историческим причинам и в принятии решения по этому поводу я, к сожалению, участия не принимал. Кстати, временные таблицы тоже придется чистить. Либо пересоздавать, причем на самом верхнем уровне, если хотим, чтобы к ним можно было обращаться не из взаимосвязанных по коду процедур. Увы, но временная таблица, созданная в процедуре, "умирает" по окончанию выполнения этой процедуры. softwarer ChA2. Если доступ через view, то нет, пользователь работает в своей "песочнице". Признаться, не доводилось слышать, чтобы где-нибудь был реализован параметризованный updateable view.Зачем параметризованные-то ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. softwarer ChA3. Да, нет, собственно. Вы похоже опять почему-то считаете, что это большие расходы. Да, я полагаю накладные расходы на работу с временными таблицами меньшими, нежели с постоянными. Данные во временных таблицах не обязаны пережить падение сервера, а следовательно нет потребности постоянно дергать диск. Данные разных сессий не путаются между блоками/страницами, нет необходимости выставлять-поддерживать-проверять блокировки.Вообще говоря, опять же ненамного. Нет необходимости дергать диск, зато активно пользуем ОЗУ, хотя это, в принципе, и не факт, так как в случае большой временной таблицы, чего желательно избегать, при недостатке ОЗУ может быть тот же самый псевдосвоппинг. Если множество изменений делать в единой транзакции, то диск точно так же не будет дергаться, пока мы не озаботимся ее фиксацией. Если в физическом смысле, то данные разных сессий и так не будут путаться между, если сделать правильный кластерный индекс. На логическом уровне клиенту все равно, он видит и работает только со своими данными. Блокировки, к сожалению, даже в этом случае используются, хотя и менее активно. Некоторые ставятся практически всегда, типа Schema-stability, другие в определенных случаях, например, потенциальной параллелизации запросов с использованием временных таблицы. Тут ничего более внятного сказать на данный момент не могу, так как этот вопрос меня не особо интересовал. По принципу, если их ставят, значит так нужно и есть разумное объяснение этому поведению. Я не претендую на то, что лучше разработчиков MSSQL знаю, когда их надо применять, а когда нет. Мне пока достаточно понимать, как и зачем я использую свои собственные блокировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 00:10 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!!пока еще Yo! на откровенной лаже никто не ловил ;) Можно начать отсюда и до конца. Особенно впечатляет Yo.!!у меня спросили совета для одной системы, я нашел красивое объеснение тормозов этой системы из-за темп-таблиц в транзакции, т.к. сайт красиво объясняло эфект который мы наблюдали. P.S. Впрочем, бесполезно все это... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 00:26 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChAЯ делаю правильный вывод из Вашей фразы, что накапливают - плохо и не накапливают - тоже плохо ? В целом примерно так :) ChAИли, лучше, как поступает Oracle ? Можно цитату на аналогичную тему из документации ? Oracle не вычисляет курсор заранее. Цитату сходу не найду, предпочту простой пример: Код: 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. 50. 51. ChAИ, кстати, давайте не будем трогать трехзвенщиков в контексте нашего обсуждения ? Это совершенно отдельная и большая тема. И не думаю, что они работают только на платформе MSSQL Согласен и согласен. Тема возникла исключительно потому, что они свои аргументы обжимают по "общему что есть у всех серверов", в частности несколько поднадоевший мне рефрен о необходимости как можно быстрее выфетчить с сервера БД всю выборку. ChAХотя бы парочку примеров таких запретительных хинтов с кратким пояснением можете привести ? Скажем, Код: 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. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. ChAВ Oracle есть временные таблицы и табличные функции ? Есть. ChAТаких хинтов, насколько понимаю, в Oracle на порядок больше, чем у MSSQL, что в значительной степени сложилось, как предполагаю, исторически. Когда оптимизатор был еще не очень качественным и требовалось много подсказок, чтобы он либо шел, либо не шел в заданном направлении. Черт его знает, если честно, почему они сложились. ChAВозможно, в Oracle все гораздо лучше и при любых условиях хинты не используются, либо - невероятно редко, а запросы никогда не упрощаются разбиением на подвыборки, какими бы сложными они не были. Насчет упрощения запросов - скажем так, сложность запросов ограничена возможностями программиста по написанию таких запросов. Существует известная рекомендация "все, что можно сделать одним запросом, делать одним запросом". Что касается хинтов - у разных людей разная практика; точка зрения "в общем случае следует стараться не использовать хинтов" более популярна, но не сказать, что повсеместно победила. Дистанционно определять, действительно ли нужны хинты или просто человек недостаточно квалифицирован и затыкает ими дыры - сами понимаете, понять не так просто. Скажем, присутствующий здесь 3л0й недавно сказал, что в их DWH весь ETL жестко захинтован, но не из-за недостатков оптимизатора, а ради гарантий стабильности планов. ChAПросто отсутствует необходимость сразу же все удалять, а можно отложить этот процесс на окончание текущей или начало следующей сессии, либо время от времени устраивать чистку Здесь согласен. Я фокусировался на другом: механизм уборки мусора таки надо писать и следить за тем, чтобы он не отвалился. Лишние хлопоты, минус подходу. ChAКстати, временные таблицы тоже придется чистить. Либо пересоздавать, причем на самом верхнем уровне, Если не ошибаюсь, пересоздание - это обычный подход в MSSQL? А так.... может быть я ошибаюсь, но очистка временной таблицы представляется мне экстремально простым занятием, единственный truncate либо drop/create. ChACREATE VIEW v AS SELECT id FROM t WHERE spid = @@SPID OK, понял мысль. ChAВообще говоря, опять же ненамного. Нет необходимости дергать диск, зато активно пользуем ОЗУ Ну, ОЗУ мы в любом случае активно пользуем, если активно дербаним данные в таблице. Насчет одной транзакции - безусловно, но в MSSQL вроде бы приняты короткие транзакции, соответственно как минимум каждый commit будет дергать диск, и это имхо довольно неприятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 02:28 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
Yo.!! SergSuper Yo.!!, блин, ну надо же так разочаровать, а вот я до этого серьёзно относился к Вашим словам. Теперь не буду. Зачем писать о том, в чем Вы не разбираетесь и слышали краем уха? Ну это еще ладно, но врать то зачем? пока еще Yo! на откровенной лаже никто не ловил ;) Значит я первый Yo.!! SergSuper При создании любой таблицы происходит вставка записи о ней в системную таблицу sysobjects. В версиях 6.5 и раньше вставка в таблицу блокировала последующие вставки в неё. Поскольку отдельный оператор - это отдельная транзакция, а select * into #t создаёт таблицу, то на время этой транзакции sysobjects была заблокирована, а транзакция длилась пока этот select шел. В 7-й версии уже появилась неблокирующая вставка в таблицу и таких косяков не было. Специально сейчас проверил на 2000-м - не блокирует. 2005-го у меня нет, но уверен что и там не будет. ну давайте вместе читать о чем я вам толкую "конструкция insert into #t select блокирует системные таблицы на время всего запроса ", разницу между запросом и транзакцией надеюсь чуете ? а что вы там тестировали ? я не утверждал, что лок поставится на всю транзакцию, я говорил о запросе т.е. на время "insert into #t select" сделал запрос который работает 20 сек и его select * into #t. Тоже самое если делать и insert into #t select. Во время выполнения запроса таблицы спокойно создаются и модифицируются. Yo.!!, ну Вы подумайте, ну как можно было бы работать если бы они всё время блокировались? Yo.!! уверен что на "select * into #t" вылезет тот же косяк, т.к. проблема в том, что локи выставляются на время создания таблицы. попробуйте. Хотя не стоит - потом же стыдно будет Yo.!! ЗЫ. интересно, что майкрософт до сих пор утверждает , что лок в sql2k ставится на всю транзакцию :) Даже я с моим никаким английским могу понять что это совсем про другое If you create a local temporary table in a stored procedure, enter a user- defined transaction, and then cancel the query , exclusive and update locks appear on the tempdb system catalog ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 11:00 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
softwarer ChAЯ делаю правильный вывод из Вашей фразы, что накапливают - плохо и не накапливают - тоже плохо ? В целом примерно так :)Отлично, а если без интриги ? Более конкретно ? softwarer ChAИли, лучше, как поступает Oracle ? Можно цитату на аналогичную тему из документации ? Oracle не вычисляет курсор заранее. Цитату сходу не найду, предпочту простой пример:Возможно не уловил смысла скрипта. Вы хотели показать, что он, как и MSSQL тоже передает сразу, не накапливая результат ? И это его стандартное поведение ? softwarer ChAХотя бы парочку примеров таких запретительных хинтов с кратким пояснением можете привести ? Скажем, Да, подобных хинтов в MSSQL нет, ну разве что запрет на раскрытие индексированных view. Навскидку трудно оценить практическую полезность приведенных хинтов, но их наличие, вероятно, лучше, чем их отсутствие. softwarerНасчет упрощения запросов - скажем так, сложность запросов ограничена возможностями программиста по написанию таких запросов. Существует известная рекомендация "все, что можно сделать одним запросом, делать одним запросом".Тут я полностью согласен. Но есть маленький нюанс, умение писать запросы тренируется. В самом начале пути программист, обычно, "тормозит" даже на простых запросах, пока не запомнит хотя бы базовый синтаксис SQL на уровне рефлексов и не научится оперировать в голове множествами. Поэтому вначале многие запросы могут показаться просто невозможными для написания без разбиения или использования курсоров в смысле ANSI. Со временем, и ростом опыта, все что может быть выражено одним оператором DML, скорее всего, так и будет написано. softwarerЧто касается хинтов - у разных людей разная практика; точка зрения "в общем случае следует стараться не использовать хинтов" более популярна, но не сказать, что повсеместно победила. Дистанционно определять, действительно ли нужны хинты или просто человек недостаточно квалифицирован и затыкает ими дыры - сами понимаете, понять не так просто.И опять же согласен, любые хинты должны применятся только тогда, когда другого пути получения требуемого результата или поведения не существует или его достижение становится слишком дорогим в каком-либо смысле. softwarerСкажем, присутствующий здесь 3л0й недавно сказал, что в их DWH весь ETL жестко захинтован, но не из-за недостатков оптимизатора, а ради гарантий стабильности планов.Вот тут не уловил, оптимизатор как бы "хороший", а планы нестабильные ? IMHO, если приходится пользоватся хинтами, то ровно потому, что оптимизатор может "врать", по крайней мере, в какой-то конкретной ситуации. Еще один случай, о котором неоднократно уже шла речь ранее, ограничением свободы оптимизатора можно получить экономию ресурсов на построение и/или перестройку планов и, соответственно, повышение предсказуемости поведения на production. Но стабильность плана в таком случае уже не является самоцелью, это просто следствие борьбы за общую производительность. Если цель состоит только в стабильности планов, то этого можно добиваться и другими способами, косвенными, в частности, постараться убрать причины, которые могут привести к изменению плана, ну, например, запретить изменение табличной статистики. softwarer ChAКстати, временные таблицы тоже придется чистить. Либо пересоздавать, причем на самом верхнем уровне, Если не ошибаюсь, пересоздание - это обычный подход в MSSQL?Ээээ потерял контекст. Обычный подход к чему ? К работе с временными таблицами ? Тогда, да. Или что-то еще подразумевается ? softwarerединственный truncate либо drop/create.Это при условии, если нет идентификатора по фильтрам, ведь различных выборок по разным условиям может быть несколько. Все таки с MDI работаем, здесь выборка, там выборка. И уже появляются сложности. В какой момент и с каким наименованием надо создавать временную таблицу. Некоторые процедуры могут одинаково работать с разными выборками, но тогда динамические запросы съедят всю пользу от подхода "одна ВТ - один Фильтр". Значит придется делать одну, но с теми же идентификаторами по фильтрам. Естественно, ни truncate, ни drop/create уже не "катят". softwarer ChAВообще говоря, опять же ненамного. Нет необходимости дергать диск, зато активно пользуем ОЗУ Ну, ОЗУ мы в любом случае активно пользуем, если активно дербаним данные в таблице. Насчет одной транзакции - безусловно, но в MSSQL вроде бы приняты короткие транзакции, соответственно как минимум каждый commit будет дергать диск, и это имхо довольно неприятно.Ну, не думаю, что в Oracle поощряются длинные транзакции. Они должны продолжаться ровно столько, сколько нужно в конкретном случае. В этом смысле, MSSQL не отличается от других RDBMS. В тоже время, понимая особенности работы с логом, нетрудно получить значительный выигрыш при использовании явных транзакций вместо стандарного autocommit-а. Например Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Код: plaintext 1. 2. P.S. Off: Книгу получили ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2006, 06:15 |
|
||
|
СУБД для учета финансовых потоков?
|
|||
|---|---|---|---|
|
#18+
ChAОтлично, а если без интриги ? Более конкретно ? Я же сказал, оптимально - не вычислять курсор раньше, чем данные реально потребуются. ChAВозможно не уловил смысла скрипта. Вы хотели показать, что он, как и MSSQL тоже передает сразу, не накапливая результат ? Нет. "Передача" здесь идет с сервера на сервер же, из курсора в ХП. И любая попытка вычислить 32326965938056011787168549511729891841 запись и выполнялась бы..... как минимум, довольно долго. Суть этого скрипта в том, что хотя запрошено вышеуказанное количество записей, реально вычисляются 10'000'000 - столько, сколь профетчено. ChAНо есть маленький нюанс, умение писать запросы тренируется. Само собой. Я здесь имел в виду уже натренированное умение; все же есть некая граница размера запроса, которую программист постарается не переходить. ChAВот тут не уловил, оптимизатор как бы "хороший", а планы нестабильные ? Тут за подробностями к автору. Я понял его так, что "дуют на воду", при их объемах в этом есть свой смысл. ChAЭэээ потерял контекст. Обычный подход к чему ? К работе с временными таблицами ? Да, именно. ChAЭто при условии, если нет идентификатора по фильтрам, ведь различных выборок по разным условиям может быть несколько. Все таки с MDI работаем, здесь выборка, там выборка. Да, пожалуй. Я привык делать немодальные окна в разных сессиях, соответственно не учел варианта "многие в одной". ChAНу, не думаю, что в Oracle поощряются длинные транзакции. Они должны продолжаться ровно столько, сколько нужно в конкретном случае. В Oracle длинные транзакции не составляют проблемы, и соответственно "сколько нужно в конкретном случае" оказывается именно "сколько нужно", а не "сколько не удается уменьшить". ChAP.S. Off: Книгу получили ? Да, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2006, 17:27 |
|
||
|
|

start [/forum/topic.php?all=1&fid=35&tid=1553427]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
386ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 714ms |

| 0 / 0 |
