2013-10-09 49 views
2

如何創建兩個VARIADIC參數。看看我的代碼並糾正我。VARIADIC參數必須是最後一個輸入參數

CREATE OR REPLACE FUNCTION ip_source_test(text,text,date,date,VARIADIC int[],VARIADIC text[]) 
RETURNS TABLE (no_documents int, "Report By" text, "Report_By" text) AS 
$$ 
BEGIN 
IF 'Source Member' = $1 THEN 
RETURN QUERY SELECT..... 
ELSEIF 'company' = $1 THEN 
RETURN QUERY SELECT..... 
ELSE 
RAISE NOTICE 'Not Worked'; 
END IF; 
RETURN; 
END; 
$$ LANGUAGE plpgsql; 

Error: VARIADIC parameter must be the last input parameter. 

在SQL代碼我應該使用6個參數。請用示例代碼更新我。

+0

你如何期待調用這個函數?你能給個例子嗎? –

+0

@RichardHuxton我不確定,但我的例外是這樣的 'select * from ip_source_test('Source Member','week','2012-09-01','2013-09-01',VARIADIC'{ 128,270}':: int [],VARIADIC'{AJ,alexandra}':: text [])' – Naveen

+0

這是一個後續:http://stackoverflow.com/questions/19202832/pass-multiple-values in-single-parameter –

回答

1

每個函數只能有一個VARIADIC,因爲可變參數包含調用者傳遞的其他參數全部

如果你指呼叫者使用數組,還有使用可變參數反正也沒點,函數簽名看起來是這樣:

CREATE FUNCTION ip_source_test(text,text,date,date,int[], text[]) 
+0

VARIADIC不包含所有其他參數。在那之前可以有其他參數。 –

+0

By _other_ arguments我的意思是那些超出函數聲明中指定的那些參數。我的理解是我們的答案都是完全一樣的。 –

1

正如錯誤消息告訴您:

VARIADIC參數必須是最後一個輸入參數。

它遵循邏輯,一個函數只能採取VARIADIC參數作爲最後一個參數。在之前可以有其他的(非VARIADIC)參數Quoting the manual here:

實際上,所有達到或超過了VARIADIC 位置的實際參數被收集成一維數組

相關問題