sql - 错误 : return type mismatch in function declared to return

标签 sql function postgresql types return

基于这些表:

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在这个特定的电路中,racepositiongrid 更好。

我这样写:

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"

最佳答案

行类型 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;

要点

关于sql - 错误 : return type mismatch in function declared to return,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27671140/

相关文章:

mysql - MySQL 中的 CASE 性能?

C++问题,包括指针、数组和函数

c++ - 为什么局部变量的值(它的地址存储在全局变量中)在函数执行完成后被释放

SQL 性能,什么在 SELECT 和 WHERE 条件下执行得更快

node.js - 使用 Node.js 连接到 Heroku 上的 postgres

.net - 格式化 SQL IN 子句的字符串

带有行号的 SQL Unpivot

java - 无法获取时间戳值

PHP:以等号作为参数的函数?

postgresql - postgresql 中面向 future 的主键设计