Tohle by prostě mělo fungovat. enum
by neměl být problém. Testováno s Postgres 9.1 a 9.2
CREATE TYPE building_code AS ENUM ('IT','EMS','HSB','ENG');
CREATE TEMP TABLE venue (id int PRIMARY KEY, building_code building_code);
INSERT INTO venue VALUES (1, 'ENG');
CREATE OR REPLACE FUNCTION room_code(_id int) --!
RETURNS building_code AS
$func$
SELECT building_code FROM venue v WHERE v.id = $1 -- !
$func$ LANGUAGE SQL;
SELECT * FROM room_code(1);
Kromě ...
-
Ve verzích starších než 9.2 můžete použít pouze poziční (číselné) parametry (
$1
) ve funkcích SQL (na rozdíl od funkcí plpgsql).
Ve 9.2+ název sloupce by měl přednost, takžeWHERE
klauzule vašeho původního kódu by vždy měla hodnotu PRAVDA a všechny řádky by se kvalifikovaly – kromě toho, že vaše funkce vrací pouze první, protože nevracíSETOF building_code
.
Buď přejmenujte svůj parametr, nebo použijte poziční parametr, nebo nejlépe obojí.
Pokud musíte použít konfliktní názvy parametrů, můžete předvolbu přepsat pomocí názvu funkce a kvalifikovat parametr. Jako:... WHERE v.id = room_code.id
-
Jako název sloupce byste neměli používat název typu.
- Neměli byste používat smíšené názvy velkých a malých písmen v uvozovkách jako
roomCode
, který bude složen na malá písmena, pokud neuvedete dvojité uvozovky:"roomCode"
.
->SQLfiddle se 3 variantami