【问题标题】:ERROR: return type mismatch in function declared to return错误:声明返回的函数中的返回类型不匹配
【发布时间】:2015-02-24 14:13:42
【问题描述】:

以这些表格为基础:

create table f1_driver(
 code varchar(5) not null primary key,
 name varchar(10),
 surname varchar(20),
 dateofbirth date,
 debut integer,
 countryoforigin varchar(20),
 points integer
);

create table f1_results (
 drivercode varchar(5) not null references f1_driver,
 circuitcode varchar(5) not null references f1_circuit,
 racedate date,
 raceposition integer,
 grid integer,
 primary key (drivercode, circuitcode,  racedate)
);

我想创建一个用户将提供circuitcode 的函数,该函数将返回驱动程序的namesurname,在此特定电路中raceposition 优于grid .

我写这个:

CREATE FUNCTION get(character) RETURNS SETOF f1_driver AS
$$
SELECT  D.name, D.surname
FROM f1_driver D,f1_results R
WHERE R.circuitcode = $1
AND D.code=R.drivercode
AND R.raceposition<grid ;
$$ LANGUAGE SQL;

我有这个错误:

ERROR:  return type mismatch in function declared to return f1_driver
DETAIL:  Final statement returns too few columns.
CONTEXT:  SQL function "get"

【问题讨论】:

    标签: sql function postgresql types return


    【解决方案1】:

    行类型f1_driver 与您实际返回的不匹配。使用RETURNS TABLE 提供匹配的声明:

    CREATE FUNCTION f_get_drivers(varchar)
      RETURNS TABLE(name varchar, surname varchar) AS
    $func$
    SELECT D.name, D.surname
    FROM   f1_driver D
    JOIN   f1_results R ON R.drivercode = D.code
    WHERE  R.circuitcode = $1
    AND    R.raceposition < R.grid;
    $func$ LANGUAGE sql;
    

    要点

    【讨论】:

    • 非常感谢!真的很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    相关资源
    最近更新 更多