我第一次嘗試在 PostgreSQL 中創建函式:
此函式必須接受陣列型別的引數。陣列包含大整數值序列。陣列的大小不是任意的,而是事先知道的。
create function get_total (cols ARRAY) returns biginteger AS
$BODY$
begin
// Some logics
end;
$BODY$
查詢中的用法
select
stats.value1,
stats.value2,
get_total(array_agg(ARRAY[stats.value2, stats.value1]))
from stats;
它回傳錯誤:
type cols[] does not exist
SQL state: 42704
當我在 Select only array_agg(ARRAY[stats.value2, stats.value1]) 中運行時,我看到該陣列已成功創建。所以是函式引數的問題。
我究竟做錯了什么?
uj5u.com熱心網友回復:
你必須將引數宣告為bigint[],它讀取一個型別的陣列,bigint例如
CREATE OR REPLACE FUNCTION get_total (bigint[])
RETURNS bigint AS
$$
BEGIN
-- your fancy logic goes here
END;
$$ LANGUAGE plpgsql
函式呼叫:
SELECT get_total(ARRAY[1111111111111,1111111111111]);
一個優雅的替代方法是將引數宣告為VARIADIC. 這樣做您可以使用多個引數呼叫您的函式,例如:
CREATE OR REPLACE FUNCTION get_total (VARIADIC bigint[])
RETURNS bigint AS
$$
BEGIN
-- your fancy logic goes here
END;
$$ LANGUAGE plpgsql;
函式呼叫:
SELECT get_total(1111111111111,1111111111111,1111111111111);
演示: db<>fiddle
uj5u.com熱心網友回復:
語法與“具有型別元素的陣列”cols ARRAY相同cols[]并表示cols。這就是為什么您會收到該函式定義的錯誤訊息的原因。
如果元素型別為bigint,則函式應定義為
CREATE FUNCTION get_total(cols bigint ARRAY) RETURNS bigint
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/346939.html
標籤:PostgreSQL 功能 plpgsql
