Aninhando várias funções

Quando uma função é colocada dentro de uma expressão de forma que sua saída se torne o valor do parâmetro para outra função da mesma expressão, diz-se que a função original está aninhada. Quando uma função é aninhada dentro de outra, a função aninhada é executada primeiro. A função aninhada também é considerada a função interna, em oposição à função externa, que recebe a saída da função interna como um parâmetro de entrada. Quando as funções são aninhadas em vários níveis, as funções mais internas são executadas primeiro. Você pode aninhar várias funções e em vários níveis – para aninhar uma função em uma função e aninhar a combinação em mais uma função. (Nota: Depois de incluir funções não escalares (ou seja, funções agregadas) em uma instrução SELECT, você começa a introduzir algumas complicações em potencial no processo, inclusive no que diz respeito às funções aninhadas.

Aqui está um exemplo que aninha uma função dentro de outra. A combinação de SUBSTR e INSTR pode ser útil na localização de strings cuja posição varia dentro de uma string, mas varia em relação a uma distância fixa a outra string. Uma técnica usada com frequência é útil ao trabalhar com informações sobre endereços postais, quando você procura a abreviação de duas letras de um dos Estados Unidos que geralmente é encontrada após a vírgula mais um espaço em branco. Veja a Figura 5-3 para um exemplo. A primeira coluna mostra a coluna ADDRESS2 inalterada. Observe, no entanto, que cada string contém uma abreviação de estado de duas letras e que cada estado está após uma vírgula mais um espaço em branco. Podemos usar esse padrão consistente para nossa vantagem. A segunda coluna mostra como podemos usar a função INSTR para encontrar o local exato dessa vírgula em cada linha individual de ADDRESS2. Por fim, a terceira coluna mostra como podemos aninhar a saída do resultado INSTR de cada linha em uma função SUBSTR. Ao adicionar 2 aos resultados do INSTR (um para a vírgula, outro para o espaço), localizamos o início preciso da abreviação de estado de duas letras em cada ocorrência de ADDRESS2 e, portanto, podemos extrair o valor da terceira coluna, STATE.

Figura 1

Por fim, observe que ordenamos a saída pelas conclusões da terceira coluna. É bastante interessante podermos classificar linhas de dados por uma sub-cadeia de colunas cuja posição muda dentro de cada linha da tabela – mas é totalmente possível graças à presença de um padrão consistente nos dados e ao uso de funções aninhadas para localizar e trabalhar com esses padrões consistentes.

Uma função usa de zero a vários valores de parâmetros de entrada. Cada função faz algum tipo de processamento que incorpora os parâmetros de entrada e, talvez, alguns outros dados também. Cada função retorna exatamente um resultado.

Referência

OCA Oracle Database SQL (Exame Guide 1Z0-071) – Páginas 317 a 318