COMANDO IF-THEN-ELSE

Comandos de controle do fluxo de execução permitem alterar o fluxo linear de execução de um programa. Há dois comandos de decisão: IF-THEN-ELSE e CASE.

O comando IF-THEN-ELSE executa diferentes trechos de programa em função do valor de uma condição (TRUE ou FALSE). Há três formas para o comando:

Na primeira forma, condição é testada e um bloco de comandos é executado se condição = TRUE. O programa continua no comando imediatamente após a cláusula END IF.

Na segunda, condição é testada e um primeiro bloco de comandos é executado se condição = TRUE e um segundo bloco, se condição = FALSE (cláusula ELSE). Observe que apenas um dos blocos é executado, já que a condição = TRUE ou condição = FALSE, mas não ambos. Após a execução do bloco correspondente, o programa continua no comando imediatamente após a cláusula END IF.

A terceira forma permite testar diversas condições. Se a condição = TRUE, o bloco correspondente é executado. Caso contrário, a condição seguinte (cláusula ELSIF) é testada e assim por diante. Se nenhuma das condições for TRUE, o bloco de comandos da cláusula ELSE, se esta estiver presente, é executado. Apenas um dos blocos de comandos será executado. Após a execução do bloco correspondente, o programa continua no comando imediatamente após a cláusula END IF.

A cláusula ELSIF condição, embora seja equivalente a ELSE IF condição, é de mais fácil leitura e evita que sejam utilizados IF aninhados.

O exemplo a seguir ilustra o funcionamento do comando IF.

Isto ocorre porque na maioria, se não em todos os SGBDR, NULL ≠ NULL. Pode parecer estranho, mas o valor NULL pode ter significados diferentes para situações distintas: indefinido, inexistente ou não aplicável. Como o Oracle não sabe o que cada NULL representa, optou-se por definir este padrão. Na realidade, não se deve comparar variáveis ou expressões com valor NULL.

Pode-se testar se uma variável ou expressão é NULL utilizando a condição pré-definida IS NULL ou sua forma negativa IS NOT NULL:

Alterando-se o exemplo anterior para tratar valores NULL, tem-se:

Agora, executando o bloco de comandos com a ou b = NULL, o resultado é corretamente apresentado. As cláusulas ELSE e ELSIF são opcionais. Porém, se forem utilizadas, elas devem conter pelo menos um comando válido.

COMANDO CASE

O comando CASE é similar ao comando IF: permite escolher um bloco de comandos para ser executado dentre vários possíveis. Há duas formas para o comando CASE:

Na primeira forma expressão é avaliada. Em seguida, o valor calculado é comparado com valor1. Se forem iguais, bloco_de_comandos1 é executado e o programa continua após a cláusula END CASE. Se não forem iguais, o valor de expressão é comparado com valor2 e assim por diante. Se nenhum dos valores fornecidos for igual ao valor de expressão, o bloco de comandos da cláusula ELSE é executado. Observe que penas um dos blocos de comando do CASE é executado.