2013-08-14 2 views
1

유형에 열거 값을 확인합니다 :PostgreSQL의 함수는 배열

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 % 확실하지 코드를 함수에 넣고 결과로 부 울린을 얻는 방법.

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

반환 TRUE 또는 NULL :

답변

1

사용 ANY 배열이 특정 요소가 들어 있는지 확인합니다. 당신이 TRUE/FALSE 사용 EXISTS을해야하는 경우 :

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

BTW,이 경우, 당신은 명시 적 캐스트 ('projector'::equipment)가 필요하지 않습니다,하지만 나쁘진 않을 것이다.