Postgresql 如何将Select*从函数返回到严格变量

Postgresql 如何将Select*从函数返回到严格变量,postgresql,Postgresql,我试图在函数中返回表中的一行,如果没有任何一行或多行,则会引发异常,这一点很重要。出于这个原因,我使用了SELECT*INTO STRICT。然而,我似乎找不到正确的返回方式。想知道是否有人知道返回单行的正确方法 我知道我可以把支票分开,让它工作,但我很好奇是否有办法让它工作 CREATE OR REPLACE FUNCTION GameInfo.getAllPlayerInfo( playerID GameInfo.Player.PID%Type) RETURNS TABLE (PI

我试图在函数中返回表中的一行,如果没有任何一行或多行,则会引发异常,这一点很重要。出于这个原因,我使用了
SELECT*INTO STRICT
。然而,我似乎找不到正确的返回方式。想知道是否有人知道返回单行的正确方法

我知道我可以把支票分开,让它工作,但我很好奇是否有办法让它工作

CREATE OR REPLACE FUNCTION GameInfo.getAllPlayerInfo(
  playerID    GameInfo.Player.PID%Type)
RETURNS TABLE (PID VARCHAR,Name VARCHAR, Email VARCHAR,Password VARCHAR) AS
 $$
 DECLARE
found_player GameInfo.Player%ROWTYPE;
BEGIN
     SELECT * INTO STRICT found_player FROM GameInfo.Player WHERE Player.PID = 
 $1;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        RAISE EXCEPTION 'PID % not found';
    WHEN TOO_MANY_ROWS THEN
        RAISE EXCEPTION 'PID % not unique';
RETURN found_player;
END;
$$ LANGUAGE plpgsql
STABLE
SECURITY DEFINER;

您的函数声明为
返回表
,因此在PL/pgSQL中,您需要使用
返回下一个…
返回一行

在异常处理之前需要移动return语句。当前,如果找到一行,则函数不会返回任何内容

您还可以使用
返回setof
来简化函数声明,因此不需要指定所有列

创建或替换函数GameInfo.getAllPlayerInfo(playerID GameInfo.Player.PID%类型)
返回gameinfo.player的设置
作为$$
声明
找到\u玩家GameInfo。玩家%ROWTYPE;
开始
选择*
成为一名优秀的球员
来自GameInfo.Player
其中Player.PID=playerid;
返回下一个找到的玩家--