Почему моя процедура вставки Firebird терпит неудачу? - PullRequest
1 голос
/ 09 февраля 2012

Я играю с веб-программированием и пытаюсь изучить соответствующие принципы. У меня есть база данных Firebird, и я пытаюсь настроить простую процедуру «нового пользователя». Кажется, он работает без ошибок, но фактически не создает новую запись пользователя.

Вот моя процедура:

SET TERM ^ ;

RECREATE PROCEDURE NEW_USER (
 NAME       VARCHAR(32),
 "PASSWORD" VARCHAR(128))
RETURNS (
 ID         INTEGER)
AS 
BEGIN
  if (exists(
    select * from USERS
    where NAME like :name)) then
    id = -1;
   else
     insert into USERS
     (NAME, PASSWORD, SALT)
     values (:name, :password, 's@lt')
     returning ID into :id;
   suspend;
END^

SET TERM ; ^

(Пожалуйста, без комментариев по поводу безопасности пароля. Я знаю. Сейчас это только для исследовательских целей.)

USERS содержит 4 столбца: ID (поле autoincrement int, работающее от генератора), NAME, PASSWORD и SALT.

Когда я пытаюсь запустить его, вот так:

select ID from NEW_USER('Test', 'password')

выполняется и возвращает пустой набор. Если я тогда запросить таблицу:

select * from USERS

Я получил еще один пустой набор.

Есть идеи, почему процедура не создает нового пользователя?

1 Ответ

4 голосов
/ 10 февраля 2012

Что вы имеете в виду под "автоинкрементным полем, работающим от генератора"? Последний стабильный выпуск 2.5 не поддерживает поля автоинкремента, вам нужно вручную создать триггер для заполнения поля ID с помощью генератора ... если вы этого не сделали, то это может быть причиной того, что ничего не вставлено (не удается создать поле PK).

...