Calling Subroutines – Notations

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

notation.JPG

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