我正在玩Web编程并尝试学习所涉及的原理。我有一个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(由生成器驱动的自动增量int字段),NAME,PASSWORD和SALT。
当我尝试运行它时,就像这样:
select ID from NEW_USER('Test', 'password')
它执行,并返回一个空集。如果我然后查询表:
select * from USERS
我得到另一个空集。
知道为什么程序没有创建新用户吗?
答案 0 :(得分:4)
“由发电机驱动的自动增量int场”是什么意思?最新的稳定版本2.5不支持自动增量字段,您必须手动创建触发器以使用生成器填充ID
字段...如果您还没有这样做那么这可能是没有理由的原因插入(无法生成PK字段)。