I’m attempting to return 0.0
if the following function does not return anything:
x
CREATE OR REPLACE FUNCTION get_height(firstn VARCHAR, lastn VARCHAR)
RETURNS FLOAT AS
$$
DECLARE
height FLOAT = 0.0;
BEGIN
SELECT into height AVG(((p.h_feet * 12) + p.h_inches) * 2.54)
FROM player p
WHERE p.firstname = firstn AND p.lastname = lastn;
RETURN height;
END;
$$ LANGUAGE plpgsql;
I’ve tried searching for it and found that COALESCE
does not work. Does anyone have any ideas how to solve this?
Table structure:
create table player(
firstname text
,lastname text
,h_feet INT
,h_inches INT
);
Example data:
insert into player values ('Jimmy','Howard',6,2);
Advertisement
Answer
Here is the script I used. As you can see I run PostgreSQL 9.4.1. I used HeidiSQL to launch the queries. Are you sure that you correctly updated your function? I just noted that you used a different function (‘player_height’) in a comment instead of ‘get_height’ in you original post.
select version();
-- PostgreSQL 9.4.1, compiled by Visual C++ build 1800, 64-bit
delimiter //
CREATE OR REPLACE FUNCTION get_height(firstn VARCHAR, lastn VARCHAR)
RETURNS FLOAT AS $$
DECLARE
height FLOAT = 0.0;
BEGIN
SELECT into height AVG(((p.h_feet * 12) + p.h_inches) * 2.54)
FROM players p
WHERE p.firstname = firstn AND p.lastname = lastn;
return coalesce(height, 0.0);
END;
$$ LANGUAGE plpgsql;
delimiter;
CREATE TABLE players (
firstname varchar(40),
lastname varchar(40),
h_feet int,
h_inches int);
insert into players values ('Jimmy', 'Howard', 6, 2);
select * from get_height('Jimmy', 'Howard');
-- gives 187.96
select * from get_height('Random', 'Guy');
-- gives 0