PostgreSQL調用函數

來源:互聯網
上載者:User

標籤:

PostgreSQL允許函數有具名引數,可以被位置名稱標記法調用。名稱標記法對有大量參數的函數特別有用,因為它更加明確和可靠的標記了形參和實參之間的聯絡。在位置標記法裡,一個函數調用的參數值要用與函式宣告相同的順序來寫出。在名稱標記法裡,參數是通過名稱來與函數參數相匹配的,可以以任意順序寫出。

不管用那種標記法,在函式宣告時給出的有預設值的參數在調用時不必寫出。但是這在名稱標記法中是特別有用的,因為參數的任意組合都是可以省略的。而在位置標記法中,參數只能從右至左省略。

PostgreSQL也支援混合標記法,混合標記法結合了位置和名稱標記法。因為這個原因,先寫位置參數然後跟著寫具名引數。

下面的例子將說明三種標記法的用法,使用下面的函數定義:

CREATE FUNCTION concat_lower_or_upper(a text, b text, uppercase boolean DEFAULT false)RETURNS textAS$$ SELECT CASE        WHEN $3 THEN UPPER($1 || ‘ ‘ || $2)        ELSE LOWER($1 || ‘ ‘ || $2)        END;$$LANGUAGE SQL IMMUTABLE STRICT;

函數concat_lower_or_upper有兩個強制的參數,a和b。此外第三個參數是一個選擇性參數uppercase,預設為false。 a和b輸入將被串聯,並且將根據uppercase 參數強製為大寫或者小寫。

1. 使用位置標記法

在PostgreSQL中,位置標記法是傳遞參數到函數的傳統機制。一個例子是:

SELECT concat_lower_or_upper(‘Hello‘, ‘World‘, true); concat_lower_or_upper ----------------------- HELLO WORLD(1 row)

所有的參數都按順序指定。因為uppercase被指定為true,所以結果為大寫。另外一個例子是:

SELECT concat_lower_or_upper(‘Hello‘, ‘World‘); concat_lower_or_upper ----------------------- hello world(1 row)

這裡,省略了參數uppercase,所以接受它的預設值false,導致小寫輸出。在位置標記法中,參數只要有預設值就可以從右至左省略。

2. 使用名稱標記法

在名稱標記法中,每個參數名字是使用:=聲明的,用來將它從參數運算式中獨立出來。例如:

SELECT concat_lower_or_upper(a := ‘Hello‘, b := ‘World‘); concat_lower_or_upper ----------------------- hello world(1 row)

另外,參數uppercase是省略的,所以它被隱式的設定為false。使用名稱標記法的好處之一是參數可以用任意順序聲明,例如:

SELECT concat_lower_or_upper(a := ‘Hello‘, b := ‘World‘, uppercase := true); concat_lower_or_upper ----------------------- HELLO WORLD(1 row)SELECT concat_lower_or_upper(a := ‘Hello‘, uppercase := true, b := ‘World‘); concat_lower_or_upper ----------------------- HELLO WORLD(1 row)
3. 使用混合標記法

混合標記法結合了位置和名稱標記法。然而,就像之前提到的,具名引數不可以在位置參數前面。例如:

SELECT concat_lower_or_upper(‘Hello‘, ‘World‘, uppercase := true); concat_lower_or_upper ----------------------- HELLO WORLD(1 row)

在上面的查詢中,參數a和uppercase是用位置聲明的,而 uppercase是用名稱聲明的。在這個例子中,添加了文檔中沒有的一點。在一個有多個參數有預設值的更複雜的函數中,名稱或者混合標記法可以節省很多敲鍵,並且可以減少犯錯的幾率。

注意: 在調用一個彙總函式時,目前不能使用名稱和混合調用標記法(但是當彙總函式用作視窗函數時,它們確實能運行)。

更多知識盡在http://www.infocool.net

PostgreSQL調用函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.