簡體   English   中英

如何在 PL/pgSQL 中返回登錄 function 中的數據? 我想返回 email 和密碼匹配的表。 Email 是獨一無二的

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM