![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему не выполняется запрос - создание хранимой процедуры? [D7, Firebird 1.5]
vishnia © (2006-05-13 13:18:00)Для создания уник.значения поля создаю генератор
CREATE GENERATOR GROUPS_N_GROUP;
Затем устанавливаю его нач.значение
SET GENERATOR GROUPS_N_GROUP TO 1;
И хочу создать хранимую процедуру:
CREATE PROCEDURE GET_N_GROUP
RETURNS ( NG SMALLINT)
AS
BEGIN
NG= GEN_ID(GROUPS_N_GROUP,1);
END
Выдает ошибку:
Dynamic SQL Error
SQL error code = -104
Unexpected end of command
Statement: CREATE PROCEDURE GET_N_GROUP
RETURNS ( NG SMALLINT)
AS
BEGIN
NG= GEN_ID(GROUPS_N_GROUP,1)
Запятую, видимо, не замечает. Не подскажете, как с этим быть?
Desdechado (2006-05-13 20:30:00) [1]до поста vishnia (13.05.06 14:17) [11] я почему-то был уверен, что команды SQL вызываются по очереди из дельфийского кода
и ошибка в этом случае возникать не должна
а оно, оказывается, из посторонней программы...
unknown (2006-05-13 14:35:00) [2]
> vishnia (13.05.06 14:31) [13]
Лена, (судя по мылу :)) выбросте нафик ibconsole, для FB лучше пользоваться
IBExpert http://ibexpert.com/rus/index.html- для exUSSR бесплатно.
vishnia (2006-05-13 14:31:00) [3]
> И вот здесь SET TERM тебе в руки
Да, и я это уже сделал вот так:
SET TERM !! ;
CREATE PROCEDURE GET_N_GROUP
RETURNS ( NG SMALLINT)
AS
BEGIN
NG= GEN_ID(GROUPS_N_GROUP,1);
END !!
SET TERM ; !!
Спасибо всем за советы и внимание!
Johnmen (2006-05-13 14:26:00) [4]Во-во и я говорю, повнимательней бы. Особенно к SET TERM.
Ибо разделителем SQL КОМАНДкомандной строки в ИБКонсоли является ;
Что совпадает с разделителем команд в процедуре.
А значит их надо различать. И вот здесь SET TERM тебе в руки...:)
vishnia (2006-05-13 14:17:00) [5]
> Невнимательно прочитал первый раз млин :(
Может компилятор такой-же невниммательный как ты :-)
Он в упор не замечает точку с запятой, хотя первые два запроса из [0] выполнились без всяких проблем. Что-нибудь можно сделать с этим? Это Firebird 1.5, создаю через IBConsole.
В документации по CREATE PROCEDURE стоит еще необязательная часть SET TERM, может как-то с этим связано?
Johnmen (2006-05-13 14:11:00) [6]>Невнимательно прочитал ...
Это и так видно....
unknown (2006-05-13 14:08:00) [7]И выполняется без проблем.
Так что Вы чего-то недоговариваете :)
unknown (2006-05-13 14:05:00) [8]Сорри, перечитал вопрос, осознал что неправ.
Невнимательно прочитал первый раз млин :(
Кстати, вот это :
CREATE GENERATOR GROUPS_N_GROUP;
SET GENERATOR GROUPS_N_GROUP TO 1;
CREATE PROCEDURE GET_N_GROUP
RETURNS ( NG SMALLINT)
AS
BEGIN
NG= GEN_ID(GROUPS_N_GROUP,1);
END
Протестировал - все создается, без проблем.
vishnia (2006-05-13 14:01:00) [9]я ввожу такой запрос:
CREATE PROCEDURE GET_N_GROUP
RETURNS ( NG SMALLINT)
AS
BEGIN
NG= GEN_ID(GROUPS_N_GROUP,1);
END
В результате его выполнения (вернее невыполнения) выдается ошибка, текст которой я приводила выше. По-моему и ';' , и 'end' в ней на месте, или я одна это вижу? Если же этого недостаточно, чтобы запрос был выполнен, то что нужно добавить?
unknown (2006-05-13 13:57:00) [10]
> vishnia (13.05.06 13:51) [4]
В [0] нет : в процедуре.
И end нет и вообще, текст процедуры приведен не полностью.
vishnia (2006-05-13 13:51:00) [11]Так я же ставлю ; и end (см. текст процедуры в моем вопросе) или это какуя-то особенная ; ?
> И suspend; где?
Для чего он?
Johnmen (2006-05-13 13:51:00) [12]Весь вопрос в том, ГДЕ создаёшь.
ЗЫ
Значения генераторов имеют тип int64 (в старых версиях int). Поэтому использование smallint сомнительно.
Во-вторых, при создании генератора его значение автоматом инициализируется нулём. И след.значение будет 1 (при шаге 1).
unknown (2006-05-13 13:41:00) [13]
> vishnia (13.05.06 13:32) [2]
>
> Не пойму что-то
>
> Выдает ошибку:
> Dynamic SQL Error
> SQL error code = -104
> Unexpected end of command
Переводим. "Непредвиденный конец команды". Почему? в PSQL надо ставить ;
А begin всегда должен завершать end
И suspend; где?
vishnia (2006-05-13 13:32:00) [14]Не пойму что-то
unknown (2006-05-13 13:29:00) [15]
> vishnia (13.05.06 13:18)
NG= GEN_ID(GROUPS_N_GROUP,1) ;
END
Ы?