SQL 語法呼叫函數,給參數的方式比較彈性,就像 Python 一樣,可以使用位置參數或命名參數來傳遞資料,下面會使用 concat_lower_or_upper(a text, b text, uppercase boolean DEFAULT false)
當範例,並說明兩種方式有什麼不同,以及可以怎麼混合使用。
以 concat_lower_or_upper
的來說,'Hello'
是第一個位置,就是 a
這個變數的參數。
SELECT concat_lower_or_upper('Hello', 'World', true);
而因為 uppercase
有預設值,所以可以省略第三個位置的參數。
SELECT concat_lower_or_upper('Hello', 'World');
如果覺得用順序決定參數太不彈性,也可以直接把每個參數指派到對應的變數。
SELECT concat_lower_or_upper(a => 'Hello', uppercase => true, b =>
'World')
當然,也可以混合兩種方式呼叫,不過這有一些限制。
SELECT concat_lower_or_upper('Hello', 'World', uppercase => true);
混合的時候,如果第一個位置到某個位置的參數是按照順序傳遞,中間不能突然出現指定參數名稱的方式,後面的位置開始指定參數名稱之後,也不能突然變成按照順序傳遞的方式。像下面的範例, Hello 在第一個位置以順序傳遞,但後面的參數要改使用指定參數的話,就得通通都用指定參數的方式。
SELECT concat_lower_or_upper('Hello', uppercase => true, b => 'World');
但如果一下子用指定參數的方式,一下子又恢復按照順序傳遞,會出現 positional argument cannot follow named argument
的錯誤訊息。
SELECT concat_lower_or_upper(a => 'Hello', 'World', uppercase => true);