4.3. Chamadas de função #

4.3.1. Uso da notação posicional
4.3.2. Uso da notação nominal
4.3.3. Uso da notação mista

O PostgreSQL permite que as funções que tenham parâmetros com nome sejam chamadas usando a notação posicional ou nominal. A notação nominal é particularmente útil para as funções com um grande número de parâmetros, porque torna as associações entre os parâmetros e os argumentos mais explícitas e confiáveis. Na notação posicional, a chamada da função organiza os valores dos argumentos na mesma ordem em que foram definidos quando a função foi criada. Na notação nominal, os argumentos são combinados com os parâmetros da função por nome, podendo ser escritos em qualquer ordem. Para cada notação, considere também o efeito dos tipos de dados dos argumentos da função, documentados na Seção 10.3.

Independentemente da notação, os parâmetros que possuem valor padrão fornecidos na declaração da função não precisam ser escritos na chamada. Mas isso é particularmente útil na notação nominal, porque qualquer combinação de parâmetros pode ser omitida; enquanto na notação posicional os parâmetros só podem ser omitidos da direita para a esquerda.

O PostgreSQL também aceita a notação mista, que combina notação posicional e nominal. Nesse caso, os parâmetros posicionais são escritos primeiro e os parâmetros com nome aparecem depois deles.

Os exemplos a seguir ilustrarão o uso de todas as três notações, usando a seguinte definição de função:

CREATE FUNCTION concat_minusc_ou_maiusc(a text, b text, maiúsculas boolean DEFAULT false)
RETURNS text
AS
$$
 SELECT CASE
        WHEN $3 THEN UPPER($1 || ' ' || $2)
        ELSE LOWER($1 || ' ' || $2)
        END;
$$
LANGUAGE SQL IMMUTABLE STRICT;

A função concat_minusc_ou_maiusc possui dois parâmetros obrigatórios, a e b. Além disso, há um parâmetro opcional maiúsculas cujo padrão é false. Os parâmetros a e b serão concatenados e convertidos em letras maiúsculas ou minúsculas dependendo do valor do parâmetro maiúsculas. Os demais detalhes desta definição de função não são importantes aqui (veja o Capítulo 36 para obter mais informações).

4.3.1. Uso da notação posicional #

A notação posicional é o mecanismo tradicional para passar argumentos para funções no PostgreSQL. Um exemplo é:

SELECT concat_minusc_ou_maiusc('Alô', 'Mundo', true);

 concat_minusc_ou_maiusc
-------------------------
 ALÔ MUNDO
(1 linha)

Todos os argumentos são especificados em ordem. O resultado está em letras maiúsculas, porque maiúsculas é especificada como true. Outro exemplo é:

SELECT concat_minusc_ou_maiusc('Alô', 'Mundo');

 concat_minusc_ou_maiusc
-------------------------
 alô mundo
(1 linha)

Aqui, o parâmetro maiúsculas é omitido, então recebe seu valor padrão false, produzindo uma saída em minúsculas. Na notação posicional, os argumentos podem ser omitidos da direita para a esquerda, desde que tenham valor padrão.

4.3.2. Uso da notação nominal #

Na notação nominal cada nome de argumento é especificado usando => para separá-lo da expressão do argumento. Por exemplo:

SELECT concat_minusc_ou_maiusc(a => 'Alô', b => 'Mundo');

 concat_minusc_ou_maiusc
-------------------------
 alô mundo
(1 linha)

Mais uma vez o argumento maiúsculas foi omitido, assumindo o valor false implicitamente. Uma vantagem de usar a notação nominal, é que os argumentos podem ser especificados em qualquer ordem. Por exemplo:

SELECT concat_minusc_ou_maiusc(a => 'Alô', b => 'Mundo', maiúsculas => true);

 concat_minusc_ou_maiusc
-------------------------
 ALÔ MUNDO
(1 linha)

SELECT concat_minusc_ou_maiusc(a => 'Alô', maiúsculas => true, b => 'Mundo');

 concat_minusc_ou_maiusc
-------------------------
 ALÔ MUNDO
(1 linha)

Uma sintaxe antiga baseada em := é aceita para manter a compatibilidade com versões anteriores:

SELECT concat_minusc_ou_maiusc(a := 'Alô', maiúsculas := true, b := 'Mundo');

 concat_minusc_ou_maiusc
-------------------------
 ALÔ MUNDO
(1 linha)

4.3.3. Uso da notação mista #

A notação mista combina a notação posicional e nominal. No entanto, como já foi mencionado, os argumentos com nome não podem preceder argumentos posicionais. Por exemplo:

SELECT concat_minusc_ou_maiusc('Alô', 'Mundo', maiúsculas => true);

 concat_minusc_ou_maiusc
-------------------------
 ALÔ MUNDO
(1 linha)

Na consulta acima, os argumentos a e b são especificados pela sua posição, enquanto maiúsculas é especificada pelo seu nome. Nesse exemplo isso acrescenta pouco, exceto para a documentação da função. Em uma função mais complexa, com vários parâmetros com valor padrão, a notação nominal, ou mista, pode melhorar a escrita e reduzir as chances de erro.

Nota

As notações de chamada nominal e mista não podem ser usadas ao chamar uma função de agregação (mas funcionam quando uma função de agregação é usada como uma função de janela).