[英]How to return data in login function in PL/pgSQL? I want to return table where email and password matches. Email is unique
function 不會拋出任何錯誤,也不會顯示任何返回值。
CREATE OR REPLACE FUNCTION login(iemail VARCHAR,ipassword VARCHAR)
RETURNS TABLE(id INTEGER, name VARCHAR, lastName VARCHAR, age INTEGER, mobile VARCHAR,email VARCHAR)
LANGUAGE 'plpgsql'
AS $$
#variable_conflict use_variable
BEGIN
RETURN QUERY SELECT id, name, lastName, age, mobile,email from usertable WHERE email = iemail AND password = ipassword;
END;
$$;
下面的查詢給了我一個返回值。 所以,我知道我的查詢語句是正確的。 此外,還檢查變量的返回類型。
SELECT id, name, lastName, age, mobile,email from usertable
WHERE email='jaysrdra@gmail.com' AND password ='passwords';
我正在撥打 function:
SELECT * FROM login('jaysrdra@gmail.com','passwords');
#variable_conflict use_variable
是原因。 由於所有 output 變量(=列)與表列同名,Postgres 返回 output 未初始化的“變量”。
在函數查詢中使用顯式表引用以避免名稱沖突:
CREATE OR REPLACE FUNCTION login(iemail VARCHAR,ipassword VARCHAR)
RETURNS TABLE(id INTEGER, name VARCHAR, lastName VARCHAR, age INTEGER, mobile VARCHAR, email VARCHAR)
LANGUAGE plpgsql
AS $$
BEGIN
RETURN QUERY
SELECT u.id, u.name, u.lastname, u.age, u.mobile, u.email
from usertable u
WHERE u.email = iemail
AND u.password = ipassword;
END;
$$;
請注意,為了將簡單查詢封裝到 function 中, language sql
function 通常是更好的選擇 - 它還避免了變量和列名之間的沖突:
CREATE OR REPLACE FUNCTION login(iemail VARCHAR,ipassword VARCHAR)
RETURNS TABLE(id INTEGER, name VARCHAR, lastName VARCHAR, age INTEGER, mobile VARCHAR, email VARCHAR)
LANGUAGE sql
AS $$
SELECT id, name, lastname, age, mobile, email
from usertable
WHERE email = iemail
AND password = ipassword;
$$;
看起來更像是您沒有正確調用 function,應該這樣調用它。
SELECT * INTO some_variable FROM login('jaysrdra@gmail.com', 'passwords');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.