1

種類:

CREATE TYPE equipment AS ENUM ('projector','PAsystem','safe','PC','phone');
CREATE TYPE building_code AS ENUM ('IT','EMS','HSB','ENG');

テーブル:

CREATE TABLE venue (
   id INTEGER DEFAULT NEXTVAL('venue_id_seq')
 , building_code building_code
 , floorNo int
 , roomNo int
 , width int
 , length int
 );

CREATE TABLE lecture_room (
   id INTEGER DEFAULT NEXTVAL('lecture_id_seq')
 , seatCount int
 , equipment equipment[]
) INHERITS(venue);

関数:

CREATE or REPLACE FUNCTION hasProjector(_id int ) RETURNS boolean AS 
$$
code to check if there exists a projector in the equipment array of lecture_room
$$ LANGUAGE SQL;

関数に入れるSQLコードと、結果としてブール値を取得する方法について、100%確信が持てません。

4

1 に答える 1

3

ANY配列に特定の要素が含まれているかどうかを確認するために使用します。

SELECT TRUE
FROM   lecture_room
WHERE  id = _id
AND    'projector' = ANY (equipment)

TRUE または NULL を返します。TRUE / FALSE が必要な場合EXISTS:

SELECT EXISTS (
   SELECT 1
   FROM   lecture_room
   WHERE  id = _id
   AND    'projector' = ANY (equipment)
   )

ところで、この場合、明示的なキャスト ( 'projector'::equipment) は必要ありませんが、害はありません。

于 2013-08-14T21:21:04.033 に答える