2016-08-09 26 views
0

根據某些輸入參數,我想要一個可以重命名其輸出參數的函數。根據一些輸入參數(前綴/後綴)重命名其輸出參數的函數

我嘗試了一些解決方案來自動執行此任務(主要集中在changing return type for function to polymorphic record variable),但這兩種解決方案都不適用於我。我會很欣賞任何提示。

這個問題讓我發瘋,因爲我目前的設置讓我寫了大量不必要的(?)代碼。 我使用這種函數來格式化視圖中顯示的日期,所以它應該是/ dynamic /。

我現在的設計是這樣的:

CREATE OR REPLACE FUNCTION name_of(
    IN in_date date, 
    OUT mnth_date text, 
    OUT qrt_date text 
) AS 
$func$ 
    BEGIN 
     mnth_date =to_char(in_date ,'YYYY"M"MM');  
     qrt_date =to_char(in_date ,'YYYY"Q"Q'); 
    END 
$func$ LANGUAGE plpgsql; 

什麼有這個結果:

select (name_of('2014-04-30')).* 


________________________ 
|mnth_date |qrt_date | 
------------------------ 
|2014M04 |2014Q2 | 

我的目標設置,是有類似這樣的結果:

select 
     A.*, B.* 
    from 
     name_of('2014-04-30','foo_prefix') A, 
     name_of('2014-05-13','creation') B; 

__________________________________________________________________________________________________ 
|foo_prefix_mnth_date |foo_prefix_qrt_date |creation_mnth_date  |creation_qrt_date  | 
-------------------------------------------------------------------------------------------------- 
|2014M04    |2014Q2     |2014M05    |2014Q2     | 

目前我大量使用別名,所以我的代碼看起來類似於:

select 
     A.mnth_date foo_prefix_mnth_date, 
     A.qrt_date foo_prefix_qrt_date, 
     B.mnth_date creation_mnth_date, 
     B.qrt_date creation_qrt_date 
    from 
     name_of('2014-04-30') A, 
     name_of('2014-05-13') B; 

回答

0

使用列aliases

SELECT 
    name_of('2014-04-30') AS foo_prefix_mnth_date, 
    name_of('2014-05-13') AS creation_mnth_date, 
    name_of('2014-06-20') AS access_mnth_date; 

關鍵字AS是可選的,因此,這也適用:

SELECT name_of('2014-04-30') foo_prefix_mnth_date; 

,但建議將其用於更好的可讀性

+0

感謝。 我這樣做,但我想放棄這種方法,因爲它沒有效果。 我更新了我的問題以更好地描述問題。 – efreet