私はWebプログラミングをしていて、関わっている原則を学ぼうとしています。私はFirebirdデータベースを持っており、簡単な「新しいユーザー」の手順を設定しようとしています。エラーなく実行されるように見えますが、実際には新しいユーザーレコードは作成されません。Firebird INSERTプロシージャが失敗するのはなぜですか?
は、ここに私の手順です:
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, '[email protected]')
returning ID into :id;
suspend;
END^
SET TERM ;^
(、パスワードのセキュリティについてのコメントは、私が知っている。これは、今の研究目的のためだけではありませんしてください。。。)
USERS
は4列含まれています:ID(自動インクリメントint型をフィールド、ジェネレータによって動力を与えられる)、名前、パスワード、および塩。私はそれを実行しようとすると
、そのよう:
select ID from NEW_USER('Test', 'password')
それが実行され、空のセットを返します。テーブルをクエリすると:
select * from USERS
もう1つ空のセットがあります。
この手順で新しいユーザーを作成しない理由は何ですか?
「オートインクリメントintフィールドで発電機で動く」とはどういう意味ですか?最新の安定版リリース2.5は自動インクリメントフィールドをサポートしていませんので、ジェネレータを使って 'ID'フィールドに手動でトリガーを作成しなければなりません。もしこれをしていなければ、何も挿入されていないかもしれません(PKフィールドの生成に失敗した)。ああ、BTW私はあなたが ''クエリをコミットすると思いますか? – ain
@ain:ああ!それが問題です。これをFirebird Maestroで設定し、実際に発電機を使用するトリガーを作成するのを忘れてしまった。あなたがそれを答えるなら、私はそれを受け入れるでしょう。 –