I’m attempting to return 0.0
if the following function does not return anything:
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