Calling Subroutines – Notations
Antes do Oracle 11g, era possível usar a notação posicional ou a notação nomeada, isso dentro de blocos PL/SQL. A notação nomeada não era possível utilizar em chamadas SQL, apenas posicional. Mas, a partir do Oracle 11g, podemos utilizar ambas as notações e foi introduzida mais uma notação, a mixa, que utiliza ambas ao mesmo tempo.
A notação posicional é a mais simples e a mais utilizada, em que é informado um valor para cada variável na lista de parâmetros. Esses valores devem ser em ordem sequencial e do mesmo datatype. Já a notação nomeada, utilizamos o nome do parâmetro forma juntamente com o operador => com o valor a ser utilizado. A notação mixa utiliza ambas as notações, nomeada e posicional ao mesmo tempo, mas para isto funcionar corretamente sem problemas, devemos declarar os parâmetros obrigatórios primeiro e somente depois os opcionais.
Para visualizar melhor as notações existentes, vamos criar uma função que recebe alguns parâmetros:
CREATE OR REPLACE FUNCTION notacao(
a NUMBER,
b NUMBER,
c NUMBER,
d NUMBER := 0,
e NUMBER := 0) RETURN NUMBER IS
BEGIN
RETURN a+b+c+d+e;
END notacao;
Os parâmetros “d” e “e” são opcionais e recebem valor 0 caso não sejam passados na chamada a função. Vejamos alguns exemplos agora
Na linha 2 e 3 foi feita uma chamada utilizando a notação posicional, informando apenas os 3 primeiros parâmetros na linha 2, que são obrigatórios. Já na linha 3 foi informando o valor 4 para o quarto parâmetro, e como não foi passado o valor do último parâmetro, o valor assumido foi o default, que no caso foi 0.
Na linha 4 foi utilizada a notação nomeada, onde utilizamos o nome do parâmetro formal, que são as letras, em conjunto com o operador “=>” e o valor. Veja também que foi alterada a ordem dos parâmetros, algo possível na notação nomeada e que não pode ser feito na notação posicional.
Na última linha, a 5, foi utilizada a notação mixa, onde os primeiros parâmetros sempre serão posicionais e depois poderemos utilizar a notação nomeada. Não se pode usar a notação posicional depois que foi utilizada a nomeada, isso irá lançar uma exceção.
Vejam também que em todos os exemplos, não foi utilizado todos os parâmetros, já que os últimos dois são opcionais. Isso é conhecido como notação excludente, ou exclusionary notation.
Referência
- Oracle 12c SQL Reference
- http://docs.oracle.com/database/121/LNPLS/subprograms.htm#LNPLS00825
Abraço