postgresql允許帶有命名引數的函式被使用位置或命名記號法呼叫。
命名記號法對於有大量引數的函式特別有用,因為它讓引數和實際引數之間的關聯更明顯和可靠。在命名記號法中,引數根據名稱匹配函式引數,並且可以以任何順序書寫。
在位置記號法中,書寫乙個函式呼叫時,其引數值要按照它們在函式宣告中被定義的順序書寫。
下列例子將展示所有三種記號法的用法:
create function concat_lower_or_upper(a text, b text, uppercase boolean default false)
returns text
asselect 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引數被強制為大寫或小寫形式。
使用位置記號
在postgresql中,位置記號法是給函式傳遞引數的傳統機制。乙個例子:
select concat_lower_or_upper('hello', 'world', true);
所有引數被按照順序指定。結果是大寫形式,因為uppercase被指定為true。另乙個例子:
select concat_lower_or_upper('hello', 'world');
這裡,uppercase引數被忽略,因此它接收它的預設值false,並導致小寫形式的輸出。在位置記號法中,引數可以按照從右往左被忽略並且因此而得到預設值。
使用命名記號
在命名記號法中,每乙個引數名都用=> 指定來把它與引數表示式分隔開。例如:
select concat_lower_or_upper(a => 'hello', b => 'world');
再次,引數uppercase被忽略,因此它被隱式地設定為false。使用命名記號法的乙個優點是引數可以用任何順序指定,例如:
select concat_lower_or_upper(a => 'hello', b => 'world', uppercase => true);
為了向後相容性,基於 ":=" 的舊語法仍被支援:
select concat_lower_or_upper(a := 'hello', uppercase := true, b := 'world');
使用混合記號
混合記號法組合了位置和命名記號法。不過,正如已經提到過的,命名引數不能超越位置引數。例如:
select concat_lower_or_upper('hello', 'world', uppercase => true);
在上述查詢中,引數a和b被以位置指定,而uppercase通過名字指定。
在這個例子中,這只增加了一點文件。
在乙個具有大量帶預設值引數的複雜函式中,命名的或混合的記號法可以節省大量的書寫並且減少出錯的機會。
命名的和混合的呼叫記號法當前不能在呼叫聚集函式時使用(但是當聚集函式被用作視窗函式時它們可以被使用)。
系統呼叫 函式呼叫
linux下對檔案操作有兩種方式 提供了庫函式,如open close read write ioctl 等,需包含標頭檔案unistd.h。以write 函式為例 其函式原型為size t write int fd,const void buf,size t nbytes 其操作物件為檔案控制代碼...
python3呼叫函式函式 呼叫函式
python內建了很多有用的函式,我們可以直接呼叫。也可以在互動式命令列通過help abs 檢視abs函式的幫助資訊。呼叫abs函式 abs 100 abs 20 abs 12.34 12.34 呼叫函式的時候,如果傳入的引數數量不對,會報typeerror的錯誤,並且python會明確地告訴你 ...
mysql 過程呼叫函式 mysql函式呼叫過程
1.conn mysql init null 初始化 mysql conn 2.mysql real connect conn,localhost root 123456 xpy 0,null,client found rows 失敗 null 建立乙個連線 3.res mysql query co...