これはうまくいくはずです。 enum
問題はないはずです。 Postgres9.1および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);
除く ...
-
9.2より前のバージョン 位置(数値)パラメータのみを使用できます (
$1
)SQL関数内(plpgsql関数とは異なります)。
9.2 +内 列名が優先されるため、WHERE
元のコードの句は常にTRUEであり、すべての行が修飾されます。ただし、関数はSETOF building_code
を返さないため、最初の行のみを返します。 。
パラメーターの名前を変更するか、位置パラメーターを使用するか、できれば両方を使用します。
競合するパラメーター名を使用する必要がある場合は、関数名を使用してパラメーターを修飾することにより、設定をオーバーライドできます。いいね:... WHERE v.id = room_code.id
-
タイプ名を列名として使用しないでください。
-
roomCode
のような引用符で囲まれていない大文字と小文字が混在する名前は使用しないでください 、二重引用符で囲まない限り、小文字に折りたたまれます:"roomCode"
。
-> SQLfiddle 3つのバリエーションで