试图进入PostgreSQL.我正在绘制一个检查凭据的函数
就这个:
CREATE or REPLACE FUNCTION CkeckUser (Login varchar(50), Password varchar(50))
RETURNS TABLE(ID int, IDParent int, Text varchar(50), Image bytea, DLLName varchar(50), MethodName varchar(50), Parameters varchar(250) )
AS $$
DECLARE
idu INT;
BEGIN
idu := null;
select idu = u."ID"
FROM "Users" u
where (u."Login" = $1) and (u."Password" = $2);
select
utm."IDMenuItem" as ID,
utm."IDParentMenuItem" as IDParent,
m."Text",
m."Image",
m."DLLName",
m."MethodName",
m."Parameters"
from "Users" u
join "UserTypes" ut on u."Type" = ut."ID"
join "UserTypeMenu" utm on u."Type" = utm."IDUserType"
join "Menu" m on utm."IDMenuItem" = m."ID";
where u."ID" = IDU;
order by m."ID";
END; $$
LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)
逻辑非常简单,但在执行它时
select CkeckUser(N'admin', N'test');
Run Code Online (Sandbox Code Playgroud)
要么
select * from CkeckUser(N'admin', N'test');
Run Code Online (Sandbox Code Playgroud)
我有
ERROR: query has no destination for result data
Run Code Online (Sandbox Code Playgroud)
哪里我错了?
在PL/pgSQL中,您不能只运行查询; 你必须将结果放在某个地方.我认为你希望函数返回查询结果?
您可以RETURN QUERY
在查询之前放置,它会将其结果集附加到函数的返回值,但在您的情况下,如果这是整个存储过程,那么将存储过程更改为纯SQL可能更容易比PL/pgSQL:
CREATE or REPLACE FUNCTION CkeckUser (Login varchar(50), Password varchar(50))
RETURNS TABLE(ID int, IDParent int, Text varchar(50), Image bytea, DLLName varchar(50), MethodName varchar(50), Parameters varchar(250) )
AS
$$
SELECT utm."IDMenuItem" AS ID,
utm."IDParentMenuItem" as IDParent,
m."Text",
m."Image",
m."DLLName",
m."MethodName",
m."Parameters"
FROM "Users" u
JOIN "UserTypes" ut
ON u."Type" = ut."ID"
JOIN "UserTypeMenu" utm
ON u."Type" = utm."IDUserType"
JOIN "Menu" m
ON utm."IDMenuItem" = m."ID"
WHERE u."ID" = ( SELECT u."ID"
FROM "Users" u
WHERE u."Login" = $1
AND u."Password" = $2
)
ORDER
BY m."ID"
$$
LANGUAGE 'SQL'
;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6251 次 |
最近记录: |