Почему моя процедура вставки 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).