简体   繁体   English

错误是期望的列数少于返回的列数

[英]Error is Expecting less columns than returned

CREATE OR REPLACE FUNCTION get_user_info ( u_email VARCHAR, u_password VARCHAR, p_name VARCHAR )
RETURNS TABLE(
    user_id             int,                
    given_name          varchar(55),
    family_name         varchar(55),
    password            varchar(255),
    email               varchar(255),
    date_of_birth       date
)
AS $$
BEGIN
    -- If a player display player_name and team_id
    IF p_name != '' THEN
        RETURN QUERY
        SELECT player.user_id, player.given_name, player.family_name, player.password, player.email, player.date_of_birth,
        player.player_name AS player_name, player.team_id AS team_id FROM player
        WHERE player.email = u_email and player.password = u_password;
    -- If not a player then display usual table
    ELSE
        RETURN QUERY
        SELECT * FROM "user"
        WHERE "user".email = u_email and "user".password = u_password;
    END IF;
END $$
LANGUAGE plpgsql;

-- Get user info with arguments - email, password and player_name. If not a player pass '' as player_name
SELECT get_user_info('tomtom@hotmail.com', 'tommy12', 'tomkilla'); -- Player

Error:错误:

ERROR:  structure of query does not match function result type
DETAIL:  Number of returned columns (8) does not match expected column count (6).
CONTEXT:  PL/pgSQL function get_user_info(character varying,character varying,character varying) line 5 at RETURN QUERY
SQL state: 42804

Just wondering why I'm getting this error?只是想知道为什么我会收到这个错误? I swear I had it working earlier but now its not >_> if I do a spectator the query works我发誓我早先让它工作了,但现在它不是>_>如果我做一个旁观者,查询就有效

Your function is expecting only 6 columns to be returned您的 function 预计只返回 6 列

(
    user_id             int,                
    given_name          varchar(55),
    family_name         varchar(55),
    password            varchar(255),
    email               varchar(255),
    date_of_birth       date
)

But your select statement is returning 8 columns但是您的 select 语句返回 8 列

player.user_id, player.given_name, player.family_name, player.password, player.email, player.date_of_birth,player.player_name AS player_name, player.team_id AS team_id 

you can add these 2 columns in return statement as您可以在 return 语句中添加这 2 列作为

(
    user_id             int,                
    given_name          varchar(55),
    family_name         varchar(55),
    password            varchar(255),
    email               varchar(255),
    date_of_birth       date,
    player_name         <type>,
    team_id             <type>
)

and in else statement you are returning all columns from users table, You may specify the columns that's need to be returned else you may face problem there as well.在 else 语句中,您将返回 users 表中的所有列,您可以指定需要返回的列,否则您也可能会在那里遇到问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM