Страница 1 из 1

Символ ";" в запросе

Добавлено: 21 сен 2006, 09:05
Lars
При использовании FibPlus 6.3.0 запрос имеет такой вид:

Код: Выделить всё

SELECT
    CAR_NAME,
    WORKSHOP_NAME,
    STATE_NAME
FROM
    VIEW_NOW_CAR_STATE
ORDER BY CAR_NAME;
Выполняется на Firebird 1.5.3 нормально,
на Firebird 2 выдает ошибку

Код: Выделить всё

RST_CAR_STATE.: [Prepare] DM.RST_CAR_STATE:
Invalid token.Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 7, column 18.
;.
Так должно быть?

Добавлено: 21 сен 2006, 11:39
WildSery
Возьми да убери. Зачем вообще в запросе точка с запятой?

Добавлено: 21 сен 2006, 13:20
Lars
Убрать - не проблема.

Так важна причина такого поведения. При тестировании в IBExpert ошибка не появляется, т.е. через эксперта можно передавать запросы с ";".

Добавлено: 21 сен 2006, 13:48
Dimitry Sibiryakov
Вполне вероятно что Эксперт сам отрезает эту точкозапятую. Сможешь сделать тесткейс на API - кинь в трэкер.

Добавлено: 21 сен 2006, 14:19
WildSery
Нет, эксперт не отрезает, проверил монитором, так и кидает с ";".
По мне - так и правильно, что ошибку вызывает. Чем строже - тем лучше. От "нестрогости" никакого функционала не добавляется.

Добавлено: 21 сен 2006, 14:24
Lars
WildSery писал(а):По мне - так и правильно, что ошибку вызывает. Чем строже - тем лучше. От "нестрогости" никакого функционала не добавляется.
А разве в SQL 92 не указано, что строка запроса должна заканчиваться ";"?

--------------

p.s. ВОт только с sql.ru c:

Структуризированный язык запросов (SQL)

Учебное пособие

Санкт-Петербургский Государственный институт
точной механики и оптики (технический университет)
Кафедра вычислительной техники
В.В.Кириллов, Г.Ю.Громов


http://www.cs.ifmo.ru/education/documen ... /2-1.shtml
точка с запятой (;) - завершающий элемент предложений SQL;
Тоже самое замечание (относительно SELECT запросов) есть и М.Грубера:

"Точка с запятой используется во всех интерактивных командах SQL чтобы сообщать базе данных что команда заполнена и готова выполниться. В некоторых системах наклонна черта влево (\) в строке, является индикатором конца команды."


Все это не к тому, что поспорить хочу. Важна причина такого поведения, странно, что никто не сталкивался.[/i]

Добавлено: 21 сен 2006, 14:32
WildSery
Да везде так написано.
Это я такой неправильный, что отдельные стейтменты никогда не завершаю ";" :roll:
Потому как считаю нужным только в тексте у предложений указывать конец.

ЗЫ: Грабера, не Грубера :wink:

Добавлено: 21 сен 2006, 14:34
Lars
WildSery писал(а):ЗЫ: Грабера, не Грубера :wink:
Ошибся

Добавлено: 21 сен 2006, 15:10
Dimitry Sibiryakov
AFAIR он Gruber, а вот на какой манер его транскрибировать: по-английски или (вспоминая происхождение) по-немецки - дело вкуса.

Настораживает в вышеприведенном тексте слово "интерактивный". То что в isql без разделителя не обойтись - однозначно, но DSQL это птица другого полета...

Добавлено: 21 сен 2006, 15:15
Lars
Dimitry Sibiryakov писал(а):AFAIR он Gruber, а вот на какой манер его транскрибировать: по-английски или (вспоминая происхождение) по-немецки - дело вкуса.

Настораживает в вышеприведенном тексте слово "интерактивный". То что в isql без разделителя не обойтись - однозначно, но DSQL это птица другого полета...
Хорошо, я попробую тесткейс сделать на API, может действительно нужно принять как новое и все.

Добавлено: 21 сен 2006, 18:10
WildSery
Dimitry Sibiryakov писал(а):AFAIR он Gruber, а вот на какой манер его транскрибировать: по-английски или (вспоминая происхождение) по-немецки - дело вкуса.
На книге написано русским по синему - "Грабер". Так я и читаю :roll:
Это извечная беда транскрипций. Почему "миссис Хадсон", однако "Гудзонов пролив", ведь фамилия одна?

Добавлено: 21 сен 2006, 20:35
kdv
читать правильно в английской, Грабер. Книжки надо покупать, а не читать в неизвестно чьем переводе :)

Добавлено: 22 сен 2006, 06:42
Lars
Да какая разница в фамилии автора? Все точно поняли о ком идет речь, но ответа так и нет дельного по вопросу.

Добавлено: 22 сен 2006, 08:11
Dimitry Sibiryakov
Двойки у меня нет, но попробуй выполнить следующее в isql:

Код: Выделить всё

SET TERM ^;
SELECT CURRENT_DATE FROM RDB$DATABASE;^

Добавлено: 22 сен 2006, 08:24
Lars

Код: Выделить всё

SET TERM ^;
SELECT CURRENT_DATE FROM RDB$DATABASE;^
Ошибок нет, выполнил.

Добавлено: 22 сен 2006, 08:44
Dimitry Sibiryakov
Значит с сервером все в порядке и DSQL модуль точкозапятые все еще игнорирует. Копай свое приложение дальше. Может, у тебя там пробел есть после точкозапятой или еще что-то в этом роде...

Добавлено: 22 сен 2006, 08:53
Lars
Dimitry Sibiryakov писал(а):Значит с сервером все в порядке и DSQL модуль точкозапятые все еще игнорирует. Копай свое приложение дальше. Может, у тебя там пробел есть после точкозапятой или еще что-то в этом роде...
нет символов после ";"