Почему моя процедура вставки Firebird терпит неудачу?

Я играю с веб-программированием и пытаюсь изучить принципы. У меня есть база данных 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 ответ

Решение

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

Другие вопросы по тегам