2014-09-25 4 views
0

I가 다음 코드가 포함 된 포스트그레스 SQL 저장 프로 시저 :단순화 포스트그레스 SQL 기능

IF something = TRUE THEN 
    SELECT id INTO some_id FROM some_table WHERE some conditions LIMIT 1; 
    RETURN QUERY SELECT * FROM some_table WHERE some conditions LIMIT 1; 
ELSE 
    SELECT id INTO some_id FROM some_table WHERE some OTHER conditions LIMIT 1; 
    RETURN QUERY SELECT * FROM some_table WHERE some OTHER conditions LIMIT 1; 
END IF; 

DELETE FROM some_table where id = some_id; 

위의 코드를 단순화 할 수있는 방법이 있나요를? IFELSE에는 반복 코드에 대해 을 수행 할 수있는 것이 없지만 매번 2 SELECT을 갖는 을 피할 수있는 방법이 있습니까? some_id에 무엇을 넣을 수 있습니까? RETURN QUERY? 함수가 당신이 게시 것만 않는 경우

+0

당신은 최신 버전에'... RETURN 쿼리 EXECUTE'사용'형식으로 생성 된 동적 SQL 문자열로 그것을 할 수 있습니다 '및 문자열 연결. –

+0

당신의'IF' 브랜치에'RETURN' 문이 있기 때문에 당신의'DELETE' 문은 결코 실행되지 않습니다. – pozs

+0

@pozs : 아니요. 'RETURN'과 달리 'RETURN QUERY'가 함수에서 빠져 나오지 않습니다. –

답변

3

그런 다음 필요가 없습니다 :

delete from some_table 
where 
    something and (some conditions) 
    or 
    something is not true and (some other conditions) 
returning * 
+0

'무언가가 NULL입니다. '사례를 놓쳤습니다. 무언가가 NULL 일 수 있다면, 두 번째 표현식이 위의'IF' 문과 같은 것을하기 위해 (또는 OP가 TRUE/FALSE/NULL을 위해 무엇을해야하는지 다시 검사해야 함)'something IS NOT TRUE'를 사용하십시오. –