[英]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.