PostgreSQL错误:查询没有结果数据的目的地

Dre*_*gel 3 sql postgresql

试图进入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)

哪里我错了?

rua*_*akh 9

在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)