我已經創建瞭如下功能基於該函數的參數,返回一組列的動態組列:返回
CREATE OR REPLACE FUNCTION getColumns(IN _column1 text, IN _column2 text, IN _column3 text, IN _column4 text, IN _table text)
RETURNS TABLE(cmf1 text, cmf2 text, cmf3 text, cmf4 text) AS
$BODY$
BEGIN
RETURN QUERY EXECUTE
'SELECT '
|| case when _column1 = 'None' then quote_literal('None') else quote_ident(_column1) end || '::text as cmf1,'
|| case when _column2 = 'None' then quote_literal('None') else quote_ident(_column2) end || '::text as cmf2,'
|| case when _column3 = 'None' then quote_literal('None') else quote_ident(_column3) end || '::text as cmf3,'
|| case when _column3 = 'None' then quote_literal('None') else quote_ident(_column3) end || '::text as cmf4'
' FROM '
|| _table;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
使用示例表:
CREATE TABLE test20130205
(
a text,
b text,
c character varying,
d text
);
我可以使用函數採用以下方式:
select * from getColumns('a','b','c','d','test20130205');
我確實有以下問題:
如何延長這個函數採取任何數量的輸入列的(我目前限制爲4),這樣的:
getColumns([textColumn1,...,textColumnN],'table')
目前我必須使用「無」作爲參數值的情況下,我需要少於4列,有沒有辦法如何避免這種情況?我認爲這將通過回答以前的問題自動解決
我可以以某種方式保存輸出中的數據類型嗎?如果沒有,我可以使用更多的數組參數嗎?然後該函數將如下所示:
getColumns( [textColumn1,...,textColumnN], [numericColumn1,...,numericColumnM], [dateColumn1,...,dateColumnO], [intColumn1,...,intColumnP], 'table' )
可能的重複:http://stackoverflow.com/q/11740256/939860 –