CREATE FUNCTION checkUsername (Iusername VARCHAR(50), Iuserpassword VARCHAR(50), result INT=0)
RETURNS VARCHAR(50) AS $$
BEGIN
SET nocount ON;
IF EXISTS (SELECT * FROM users WHERE username=Iusername AND userpassword=Iuserpassword)
SET result = 1
ELSE
SET result = 0
END IF;
END;$$LANGUAGE plpgsql;
uj5u.com熱心網友回復:
除了returnplpgsql 函式中所需的缺失陳述句,并且沒有set陳述句之外,您的函式還有其他錯誤和/或明顯的誤解。首先不需要宣告形式引數的大小,它只是被丟棄而忽略并丟棄。說到引數,為什么要提供result整數型別的回傳引數 ( ) 然后定義函式以回傳一個varchar. 最后是 IF 和賦值陳述句的問題。True 分支需要THEN關鍵字,then/else 分支中的每個陳述句都需要陳述句終止符 (;)。更正每個代碼變為:
create or replace
function checkusername (
iusername varchar
, iuserpassword varchar
, result varchar default '0') -- type and value to match returns declaration
returns varchar
as $$
begin
if exists (select *
from users where username=iusername
and userpassword=iuserpassword
)
then -- added
result = '1'; -- added 's and ;
else
result = '0'; -- added 's and ;
end if;
return result; -- added
end;
$$ language plpgsql;
但是,這可以大大減少。Postgres 完全支持BOOLEAN資料型別。由于EXISTS回傳的是布林值,因此無需測驗,直接回傳其結果即可。這也允許一個 SQL 函式(1 個陳述句):
create or replace
function checkusername (
iusername varchar
, iuserpassword varchar
)
returns boolean
language sql
as $$
select exists (select null
from users
where username=iusername
and userpassword=iuserpassword
);
$$;
參見演示(功能有所變化);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/316239.html
標籤:sql PostgreSQL 验证 存储过程 plpgsql
上一篇:Django自定義注冊表單錯誤
