2012-02-22 68 views
1

我編寫了一個函數來返回一組記錄(RETURNS SETOF),使用return next。排序函數返回的setof記錄

有沒有辦法在返回之前對結果集進行排序?像訪問集合的引用,對其進行排序,然後返回。 我已經在某些查詢中使用了順序,但是我需要編寫額外的代碼來對結果進行排序。

作爲一種變通方法我打電話的功能是這樣的:

select * from (select * from myfunction()) d 
order by d.whatever,d.othercolumn 

感謝。

回答

1

如果您在下一次返回之前無法訂購數據 - 您可以將函數的調用包裝到另一個函數中,從所需的順序中選擇數據並返回。

+0

謝謝,我想我會那樣做。 – 2012-02-22 19:53:53

+1

注意:如果您在與另一個「真實」表的連接中使用函數的結果集,則查詢優化器不能「查看」該順序(它不能在函數內部查看),因此連接將涉及顯式排序步驟+合併或散列查找。 – wildplasser 2012-02-22 20:26:44