|
|
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Столкнулся со странной вещью. ВЫполняем вот такой запрос: Create Table #Groups (ID integer, Name varchar(10), Process int ) go if (1=2) begin print 'Alter table Groups add column "Process"' Alter table #Groups add Process int default 1 end go и Sybase плавно забивает на условие (1=2) и пытается создать колонку... При этом print не выполнется... Еще интересный момент если Alter такой: Alter table #Groups add Process int NULL то все отрабатывает корректно... Что это? В чем скрытый смысл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2008, 09:40 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Mikle83 пишет: > Что это? В чем скрытый смысл? Все комманды DDL должны быть ОТДЕЛЬНЫМ БАТЧЕМ (если это происходит не в процедуре). Кроме того, вы видимо не понимаете, как компилируются, валидируются и выполняются запросы, и отсюда - недоумение. Даже если запрос НЕ ВЫПОЛНЯЕТСЯ ВООБЩЕ, он перед этим валидируется целиком, даже невыполняющиеся части. Это значит, что разрешаются имена объектов, полей и т.п. В частности, валидируется на правильность и DDL. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2008, 11:45 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
MasterZiv Mikle83 пишет: > Что это? В чем скрытый смысл? Все комманды DDL должны быть ОТДЕЛЬНЫМ БАТЧЕМ (если это происходит не в процедуре). Кроме того, вы видимо не понимаете, как компилируются, валидируются и выполняются запросы, и отсюда - недоумение. Даже если запрос НЕ ВЫПОЛНЯЕТСЯ ВООБЩЕ, он перед этим валидируется целиком, даже невыполняющиеся части. Это значит, что разрешаются имена объектов, полей и т.п. В частности, валидируется на правильность и DDL. Posted via ActualForum NNTP Server 1.4 Тогда может быть вы мне объясните разницу между Alter table #Groups add Process int default 1 и Alter table #Groups add Process int NULL ??? Почему во втором случае валидируется (или как там), вообщем на условие обращается внимание, а в первом на условие забивается? P.S.: MS SQL SERVER 2000 отрабатывает корректно в обоих случаях... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2008, 12:00 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Народ!!! Подскажите какой-нить профильный форум по Sybase, плиз... можно ли как-то получить ответ у разработчиков на данный вопрос? ибо очень сильно надо решить возникшую проблему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2008, 15:20 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Mikle83 пишет: > Народ!!! Подскажите какой-нить профильный форум по Sybase, плиз... можно > ли как-то получить ответ у разработчиков на данный вопрос? ибо очень > сильно надо решить возникшую проблему... Я же тебе объяснил. Любой DDL ДОЛЖЕН быть отдельным батчем. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2008, 15:30 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Тогда как решить такую задачу: дистанционно необходимо проапгрейдить таблицу на БД клиента... Апгрейд заключается в добавлении колонки Process типа bit, not null, Defualt = 1. Ситуация такова, что в таблице уже может быть такая колонка... Поэтому необходимо предварительно сделать проверку на существование, и если уже существует, то не создаем колонку... Как сие можно реализовать... На MS SQL все разводилось через If в скрипте, здесь же это не прокатывает... З.Ы.: Просьба не обсуждать выбранный подход апгрейда таблиц, так как он был выбран не мною :) и не в моих силах пока его поменять... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2008, 15:59 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Mikle83Тогда как решить такую задачу: дистанционно необходимо проапгрейдить таблицу на БД клиента... Апгрейд заключается в добавлении колонки Process типа bit, not null, Defualt = 1. Ситуация такова, что в таблице уже может быть такая колонка... Поэтому необходимо предварительно сделать проверку на существование, и если уже существует, то не создаем колонку... Как сие можно реализовать... На MS SQL все разводилось через If в скрипте, здесь же это не прокатывает...Все прокатывает. Надо только правильно писать. Код: plaintext 1. 2. 3. 4. 5. 6. Mikle83З.Ы.: Просьба не обсуждать выбранный подход апгрейда таблиц, так как он был выбран не мною :) и не в моих силах пока его поменять...А чего его обсуждать? Правильный подход. Осталось только научиться его правильно применять... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2008, 16:43 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Это понятно. Но при попытке выполнить такой запрос на базе выдается сообщение: "Column names in each table must be unique. Column name 'Process' in table 'Groups' is specified more than once." Причем, если используем alter table Groups add Process int null тогда все нормально работает... Вот в чем загадка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2008, 16:57 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Кстати,даже если в качестве условия поставить if (1=2) то все равно на него забивается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2008, 16:59 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Mikle83Это понятно. Но при попытке выполнить такой запрос на базе выдается сообщение: "Column names in each table must be unique. Column name 'Process' in table 'Groups' is specified more than once."А ну да, это ж ASE... Это в SA все работает и без извращений, а на ASE надо писать так: Код: plaintext 1. 2. 3. 4. 5. 6. Mikle83Причем, если используем alter table Groups add Process int null тогда все нормально работает... Вот в чем загадка...ээээ... тут не уверен. Это какие-то странности в парсере sql. Если есть слово default, то парсер ведет себя более жестко чем без него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2008, 17:19 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Mikle83Тогда как решить такую задачу: дистанционно необходимо проапгрейдить таблицу на БД клиента... Апгрейд заключается в добавлении колонки Process типа bit, not null, Defualt = 1. Ситуация такова, что в таблице уже может быть такая колонка... Поэтому необходимо предварительно сделать проверку на существование, и если уже существует, то не создаем колонку... Можно так, к примеру - Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2008, 17:26 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
SAV4SAV пишет: > select syb_quit() Опередили, опередили !! Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2008, 23:12 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
[/quot]ээээ... тут не уверен. Это какие-то странности в парсере sql. Если есть слово default, то парсер ведет себя более жестко чем без него.[/quot] Вот и я про тоже... Причем уже с несколькими подобными странностями я сталкивался... Немного напрягает непредсказуемость ASE... Спасибо за совет!!! Вариант с execute - как раз то, что нужно - прокатывает отлично. А вот с выходом select syb_quit() не идет :( Ругается: "Failure has occurred in CT-Library call. Connection is no longer usable and will be automatically dropped." Возможно настройки сервака надо крутить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 08:26 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Mikle83А вот с выходом select syb_quit() не идет :( Ругается: "Failure has occurred in CT-Library call. Connection is no longer usable and will be automatically dropped." Возможно настройки сервака надо крутить? Это стандартное поведение syb_quit(), "крутить" нечего. А что плохого в том, что возникнет ошибка при повторном выполнении alter, ничего ведь не произойдет. Или проблема в клиенте (в смысле, в клиентской программе), который не умеет игнорировать подобные ошибки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 10:02 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что выполнения скрипта на этом останавливается... А ведь после создания/не создания поля в таблице он должен выполнить еще кучу действий... Выносить в отдельный скрипт создание каждого поля? Как-то не рационально... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 10:17 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Mikle83Проблема в том, что выполнения скрипта на этом останавливается Не понял ни разу, что Вы имеете в виду. Судя по "go", Вы это выполняете через isql (или через другой клиент, который понимает "go"). Если в скрипте будет ошибка, этот error просто надо сложить в отдельный файл с ошибками (см. параметры командной строки isql), чтобы потом можно было проанализировать. Прочие команды, которые идут через "go", выполнятся замечательно даже при ошибке. Только не надо добавлять несколько полей в рамках одного "go", то есть, надо делить скрипт операторами "go" на "атомарные" конструкции. А потом при анализе игнорировать ошибки типа "такое поле уже есть" или "нет полей для измения". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 15:18 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Странно. У меня на каждое поле отдельная секция GO... Но при столкновении с ошибкой выполнение скрипта останавливается! З.Ы.: Использую Advantage для выполнения скрипта... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 16:19 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Mikle83Использую Advantage для выполнения скрипта... Именно им не пользуюсь, так что может он и имеет какую-нибудь настройку на эту тему. isql и DBArtisan после ошибок идут дальше (как я писал). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 16:43 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов Mikle83Использую Advantage для выполнения скрипта... Именно им не пользуюсь, так что может он и имеет какую-нибудь настройку на эту тему. isql и DBArtisan после ошибок идут дальше (как я писал).А вот в isql 15-ESD#10 появилась замечательная опция - --retserverror. Если ее дать в командой строке, то получив первую же ошибку от сервера, isql дальше не идет. Замечательная вещь для батников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 17:12 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
Mikle83 пишет: > Автор: "Mikle83" > [/quot]ээээ... тут не уверен. Это какие-то странности в парсере sql. > Если есть слово default, то парсер ведет себя более жестко чем без > него.[/quot] > > Вот и я про тоже... Причем уже с несколькими подобными странностями я > сталкивался... Немного напрягает непредсказуемость ASE... > > Спасибо за совет!!! Вариант с execute - как раз то, что нужно - > прокатывает отлично. > > А вот с выходом select syb_quit() > не идет :( Ругается: "Failure has occurred in CT-Library call. > Connection is no longer usable and will be automatically dropped." Так это ж и есть результат работы syb_quit() ! FAQ смотри ... http://www.sql.ru/faq/faq_topic.aspx?fid=247 Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 19:31 |
|
||
|
Sybase ASE 12.5. Конструкции IF, приоритет операций...
|
|||
|---|---|---|---|
|
#18+
MasterZiv Так это ж и есть результат работы syb_quit() ! Эт я понимаю, но такой результат меня не устраивает :) Мне надо, чтобы выполнение скрипта продолжалось а не прекращалось при существовании поля... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 08:48 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=35195576&tid=2011670]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
161ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 509ms |

| 0 / 0 |
