为什么我的Firebird INSERT程序失败了?

时间:2012-02-09 16:29:09

标签: sql stored-procedures firebird

我正在玩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

我得到另一个空集。

知道为什么程序没有创建新用户吗?

1 个答案:

答案 0 :(得分:4)

“由发电机驱动的自动增量int场”是什么意思?最新的稳定版本2.5不支持自动增量字段,您必须手动创建触发器以使用生成器填充ID字段...如果您还没有这样做那么这可能是没有理由的原因插入(无法生成PK字段)。