Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему не выполняется запрос - создание хранимой процедуры? [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

Ы?


Наверх

Титульная страница Поиск, карта сайта Написать письмо