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

时间:2012-02-17 15:35:35

标签: 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';

逻辑非常简单,但在执行时

 select CkeckUser(N'admin', N'test');

  select * from CkeckUser(N'admin', N'test');

我得到了

  ERROR:  query has no destination for result data

我哪里错了?

1 个答案:

答案 0 :(得分: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'
;
相关问题