2014-09-25 60 views
0

我有一個包含下面的代碼PostgreSQL的存儲過程:簡化PostgreSQL的功能

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中的重複代碼,但是有沒有辦法避免每次都有的 ?是否有可能在some_id中插入東西,而 RETURN QUERY

+0

你可以用'返回查詢執行...'在新版本中,並用'格式創建一個動態的SQL字符串做'和字符串連接。 – 2014-09-25 14:12:45

+0

您的'DELETE'語句永遠不會被執行,因爲您的'IF'分支都有'RETURN'語句。 – pozs 2014-09-25 17:43:06

+0

@pozs:編號'RETURN QUERY'不會退出函數(不像'RETURN')。 – 2014-09-25 18:11:09

回答

3

如果只發布什麼功能的話那麼它是沒有必要的:

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

錯過了'something IS NULL'的情況。如果某些東西可以是NULL,那麼對第二個表達式使用或「something IS NOT TRUE」與上面的IF語句做相同的操作(或者OP需要重新檢查TRUE/FALSE/NULL的操作)。 – 2014-09-25 18:16:03