Hi All,
I want to fire a query such that if the particular column does not exist then query should return some default value. For that I have tried following experiment. SETUP details: Platform : Sun Solaris 5.10 Postgres : 8.3.7 CREATE TABLE tbl ( c1 integer, c2 integer, c3 integer ); INSERT INTO tbl VALUES (1, 2, 3); INSERT INTO tbl VALUES (2, 3, 4); INSERT INTO tbl VALUES (3, 4, 5); INSERT INTO tbl VALUES (4, 5, 6); INSERT INTO tbl VALUES (5, 6, 7); INSERT INTO tbl VALUES (6, 7, 8); INSERT INTO tbl VALUES (7, 8, 9); INSERT INTO tbl VALUES (8, 9, 10); CREATE OR REPLACE FUNCTION ColumnAlreadyExists(name, name) RETURNS INTEGER AS E' DECLARE columnCount INTEGER; BEGIN SELECT COUNT (pg_attribute.attname) into columnCount FROM pg_attribute,pg_class, pg_type WHERE ((pg_attribute.attrelid=pg_class.oid) AND (pg_attribute.atttypid=pg_type.oid) AND (pg_class.relname = $1) AND (pg_attribute.attname = $2)); IF columnCount = 0 THEN RETURN 0; END IF; RETURN 1; END; ' LANGUAGE 'plpgsql'; DROP FUNCTION checkColumn(name,name,name); CREATE OR REPLACE FUNCTION checkColumn(name, name, name) RETURNS name AS E' DECLARE isColumnExist INTEGER; BEGIN SELECT ColumnAlreadyExists ($1,$2) into isColumnExist; IF isColumnExist = 0 THEN RETURN name($3); ELSE RETURN name($2); END IF; END; ' LANGUAGE 'plpgsql'; Function checkColumn should return proper column name (second parameter) if column exist and third parameter if column not exist. NOW when I try to execute following command it returns improper result. I expect proper column values as a output of query. SELECT(checkColumn('tbl','c2','0'))::name FROM tbl; mydb=# SELECT (checkColumn('tbl','c2','0'))::name FROM tbl; checkcolumn ------------- c2 c2 c2 c2 c2 c2 c2 c2 (8 rows) mydb=# Above query should return actual values present for c2 column in tbl. But it's not working as desired. Please help me in this. Thanks in advance, Santosh.