これは私の最初の mySQL ストアド関数です。ユーザーがクライアント エリアにログインできるかどうかを確認する機能が必要です。上記のコードを書きました:
DELIMITER $$
CREATE FUNCTION `A05`.`login` (user VARCHAR(64),pass VARCHAR(64)) RETURNS INT
BEGIN
declare num_rows int;
declare id int;
SELECT (@num_rows:=COUNT(*)),(@id:=`Credential_id`) FROM `A05`.`Credentials` where `Credential_UserName` = user;
if num_rows = 0 then
-- user not present
return (-1);
end if;
-- user present, checking password
SELECT (@num_rows:=COUNT(*)),(@id:=`Credential_id`) FROM `A05`.`Credentials` where `Credential_id` = id AND `Credential_PASSWORD` = SHA1(pass);
if num_rows = 0 then
-- user presente, password incorrect
INSERT INTO `a05`.`Events` (
`Event_id` ,
`Event_RegistrationDate` ,
`Event_VariationDate` ,
`Event_State`,
`Event_Notes`,
`Event_SenderId`,
`Event_Type`
)
VALUES (
NULL , NOW(), NOW(), 'wp', NULL, id, 1
);
return (-2);
end if;
-- user present, password correct
UPDATE `A05`.`Credentials` SET `Credential_LastAccess`=NOW() where `Credential_id` = id;
INSERT INTO `a05`.`Events` (
`Event_id` ,
`Event_RegistrationDate` ,
`Event_VariationDate` ,
`Event_State`,
`Event_Notes`,
`Event_SenderId`,
`Event_Type`
)
VALUES (
NULL , NOW(), NOW(), 'ok', NULL, id, 0
);
return id;
END
最後のステートメント return id を除いて、構文は正しいはずだと思います。これは、整数ではなくセットを返すためです。問題は、この関数を mysql に保存しようとすると、次のエラーが発生することです。
Error 1415: Not allowed to return a result set from a function
次に、テスト目的で最後のステートメントを「return id」から「return 0」に変更しましたが、同じエラーが発生し続けます。おそらく、SQLの「高度な」スクリプトを初めて使用する初心者のエラーです。事前にどうもありがとうございました!