Instrução Oracle PL / SQL IF THEN ELSE: ELSIF, NESTED-IF

Índice:

Anonim

O que são declarações de tomada de decisão?

As instruções de tomada de decisão são aquelas que decidirão o controle de fluxo das instruções SQL com base nas condições. Ele dá ao programador um melhor controle para impedir a execução de um determinado código (diagrama 1) ou escolher um código desejado com base na condição (diagrama 2). Abaixo está a representação pictórica da "Declaração de tomada de decisão".

Diagrama de declaração de tomada de decisão

Tipos de declarações de tomada de decisão:

A Oracle fornece os seguintes tipos de declarações de tomada de decisão.

  • SE ENTÃO
  • SE-ENTÃO-OUTRO
  • IF-THEN-ELSIF
  • NESTED-IF
  • CASO
  • CASO PESQUISADO

Neste tutorial, você aprenderá-

  • Introdução às declarações de tomada de decisão
  • Declaração IF-THEN
  • Declaração IF-THEN-ELSE
  • Declaração IF-THEN-ELSIF
  • Declaração NESTED-IF

Declaração IF-THEN

A instrução IF-THEN é usada principalmente para executar uma seção específica de códigos apenas quando a condição é satisfeita.

A condição deve resultar em Booleano (Verdadeiro / Falso). É uma instrução condicional básica que permitirá ao ORACLE executar / pular um determinado trecho de código com base nas condições predefinidas.

Sintaxe para declarações IF THEN:

IF THEN-executed only if the condition returns TRUEEND if;
  • Na sintaxe acima, a palavra-chave 'IF' será seguida por uma condição avaliada como 'TRUE' / 'FALSE'.
  • O controle executará apenas se a condição retornar .
  • No caso da condição ser avaliada como , então, o SQL irá ignorar o e iniciar a execução do código próximo ao bloco 'END IF'.

Nota: Sempre que a condição for avaliada como 'NULL', o SQL tratará 'NULL' como 'FALSE'.

Exemplo 1 : Neste exemplo, vamos imprimir uma mensagem quando o número for maior que 100. Para isso, vamos executar o seguinte código

Para imprimir uma mensagem quando um número tem valor superior a 100, executamos o seguinte código.

DECLAREa NUMBER :=10;BEGINdbms_output.put_line(‘Program started.' );IF( a> 100 ) THENdbms_output.put_line('a is greater than 100');END IF;dbms_output.put_line(‘Program completed.');END;/

Explicação do código:

  • Linha de código 2: Declarando a variável 'a' como tipo de dados 'NUMBER' e inicializando-a com o valor '10'.
  • Linha de código 4: Imprimindo a instrução "Programa iniciado".
  • Linha de código 5: Verificando a condição, se a variável 'a' é maior que '100'.
  • Linha de código 6: Se 'a' for maior que '100', então "a é maior que 100" será impresso. Se 'a' for menor ou igual a 100, a condição falha e, portanto, a declaração de impressão acima é ignorada.
  • Linha de código 8: Imprimindo a declaração "Programa concluído".

Saída de código:

Program started.Program completed. 

Exemplo 2: Neste exemplo, vamos imprimir uma mensagem se um determinado alfabeto estiver presente nas vogais do inglês (A, E, I, O, U).

Para imprimir uma mensagem quando o caractere fornecido é Vogal, executamos o seguinte código.

DECLAREa CHAR(1) :=’u’;BEGINIF UPPER(a) in ('A’,'E','I','0','U' ) THENdbms_output.put_line(‘The character is in English Vowels');END IF;END;/

Explicação do código:

  • Linha de código 2: Declarando a variável 'a' como 'CHAR' do tipo de dados de tamanho '1' e inicializando-a com o valor 'u'.
  • Linha de código 4: Verificar a condição, se a variável 'a' está presente na lista ('A', 'E', 'I', 'O', 'U').
  • O valor de 'a' foi convertido em maiúsculas antes da comparação para fazer a comparação sem distinção entre maiúsculas e minúsculas.
  • Linha de código 5: Se 'a' estiver presente na lista, a declaração "The character is in English Vowels" será impressa. Se a condição falhou, então este programa não dará nenhuma saída, já que fora do bloco IF-THEN não emitimos nenhuma declaração de impressão.

Saída de código:

The character is in English Vowels

Declaração IF-THEN-ELSE

  • A instrução IF-THEN-ELSE é usada principalmente para selecionar entre duas alternativas com base na condição.
  • Abaixo está a representação da sintaxe da instrução IF-THEN-ELSE.

Sintaxe para declarações IF-THEN-ELSE:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • Na sintaxe acima, a palavra-chave 'IF' será seguida por uma condição avaliada como 'TRUE' / 'FALSE'.
  • O controle executará apenas se a condição retornar .
  • Caso a condição seja avaliada como , o SQL executará .
  • Em qualquer caso, um dos dois blocos de ação será executado.

Nota: Sempre que a condição for avaliada como 'NULL', o SQL tratará 'NULL' como 'FALSE'.

Exemplo 1 : Neste exemplo, vamos imprimir a mensagem se o número fornecido é ímpar ou par.

DECLAREa NUMBER:=11;BEGINdbms_output.put_line (‘Program started');IF( mod(a,2)=0) THENdbms_output.put_line('a is even number' );ELSEdbms_output.put_line('a is odd number1);END IF;dbms_output.put_line (‘Program completed.’);END;/

Explicação do código:

  • Linha de código 2: Declarando a variável 'a' como tipo de dados 'NUMBER' e inicializando-a com o valor '11'.
  • Linha de código 4: Imprimindo a instrução "Programa iniciado".
  • Linha de código 5: Verificando a condição, se o módulo da variável 'a' por '2' é 0.
  • Linha de código 6: Se '0', então "a é um número par" será impresso.
  • Linha de código 7: Se o valor do módulo não for igual a '0', então a condição retorna , então a mensagem "a é um número ímpar" será impressa.
  • Linha de código 10: Imprimindo a declaração "Programa concluído"

Saída de código:

Program started.a is odd numberProgram completed. 

Declaração IF-THEN-ELSIF

  • A instrução IF-THEN-ELSIF é usada principalmente quando uma alternativa deve ser escolhida de um conjunto de alternativas, onde cada alternativa tem suas próprias condições a serem satisfeitas.
  • As primeiras condições que retornam serão executadas e as demais condições serão ignoradas.
  • A instrução IF-THEN-ELSIF pode conter o bloco 'ELSE'. Este bloco 'ELSE' será executado se nenhuma das condições for satisfeita.

Nota : o bloco ELSE é opcional nesta instrução condicional. Se não houver bloco ELSE e nenhuma das condições for satisfeita, o controlador pulará todo o bloco de ação e começará a executar a parte restante do código.

Sintaxe para instruções IF-THEN-ELSIF:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • Na sintaxe acima, o controle executará apenas se a condição1 retornar .
  • Se a condição1 não for satisfeita, o controlador verificará a condição2.
  • O controlador sairá da instrução IF nos dois casos a seguir.
    • Quando o controlador encontra qualquer condição que retorna . Nesse caso, o action_block correspondente será executado e o controlador sairá deste bloco de instrução IF e começará a executar o código restante.
    • Quando nenhuma das condições é satisfeita, o controlador then executará o bloco ELSE, se presente, e sairá da instrução IF.

Nota: Sempre que a condição for avaliada como 'NULL', o SQL tratará 'NULL' como 'FALSE'.

Exemplo 1: Sem bloco ELSE

Neste exemplo, vamos imprimir a nota com base nas notas fornecidas sem outra condição (nota> = 70 Grau A, marca> = 40 e marca <70 Grau B, marca> = 35 e marca <40 Grau C).

DECLAREmark NUMBER :=55;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C’);END IF;dbms_output.put_line(‘Program completed.’);END;/

Explicação do código:

  • Linha de código 2: Declarando a variável 'marca' como tipo de dados 'NÚMERO' e inicializando-a com o valor '55'.
  • Linha de código 4: Imprimindo a instrução "Programa iniciado".
  • Linha de código 5: Verificando a condição1, se a 'marca' é maior ou igual a 70.
  • Linha de código 7: Uma vez que a condição1 falhou, a condição2 '70> marca> = 40 'é verificada.
  • Linha de código 8: A condição2 retorna , portanto, a mensagem 'Grau B' será impressa.
  • Linha de código 12: Imprimindo a instrução "Programa concluído".
  • Neste caso, a condição3 'marca <35' será ignorada, pois o controlador encontrou uma condição que retorna antes da condição3.

Saída de código:

Program started.Grade BProgram completed.

Exemplo 2 : com bloco ELSE

Neste exemplo, vamos imprimir a nota com base nas notas fornecidas com a condição else (marca> = 70 Grau A, marca> = 40 e marca <70 Grau B, marca> = 35 e marca <40 Grau C, senão 'Sem nota').

DECLAREmark NUMBER :=25;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C);ELSEdbms_output.put_line(‘No Grade’);END IF;dbms_output.put_line(‘Program completed.' );END;/

Explicação do código:

  • Linha de código 2: Declarando a variável 'marca' como tipo de dados 'NÚMERO' e inicializando-a com o valor '25'.
  • Linha de código 4: Imprimindo a instrução "Programa iniciado".
  • Linha de código 5: Verificando a condição 1, se a 'marca' é maior ou igual a 70.
  • Linha de código 7: Uma vez que a condição1 falhou, a condição2 '70> marca> = 40 'é verificada.
  • Linha de código 8: Como a condição2 falhou, a condição3 '40> marca> = 35 'é verificada.
  • Linha de código 11: Como todas as condições falharam, o controle agora verificará a presença do bloco ELSE e imprimirá a mensagem 'Sem Grau' do bloco ELSE.
  • Linha de código 14: Imprimindo a instrução "Programa concluído".

Saída de código:

Program started.No GradeProgram completed.

Declaração NESTED-IF

  • A instrução NESTED-IF basicamente permite que os programadores coloquem uma ou mais condições 'IF' dentro de de outra condição 'IF' além das instruções normais.
  • Cada condição 'IF' deve ter uma instrução 'END IF' separada que marca o fim do escopo de em particular.
  • A instrução 'IF' considerará a instrução 'END IF' mais próxima como um ponto final para aquela condição particular.
  • A representação pictórica para NESTED-IF é mostrada abaixo do diagrama.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Explicação da sintaxe:
  • Na sintaxe acima, o IF externo contém mais uma instrução IF em seu bloco de ação.
  • A condição1 retorna , então o controle executará e verificará a condição2.
  • Se a condição2 também retornar , então também será executado.
  • No caso da condição2 ser avaliada como , então, o SQL irá ignorar o .

Aqui vamos ver um exemplo de Nested If -

Exemplo de declaração aninhada-se: maior de três números

Neste exemplo, vamos imprimir o maior de três números usando a instrução Nested-If. Os números serão atribuídos na parte de declaração, como você pode ver no código abaixo, ou seja, Número = 10,15 e 20 e o número máximo será obtido usando instruções aninhadas se.

DECLAREa NUMBER :=10;b NUMBER :=15;c NUMBER :=20;BEGINdbms_output.put_line(‘Program started.' );IF( a> b)THEN/*Nested-if l */dbms_output.put_line(’Checking Nested-IF 1');IF( a> c ) THENdbms_output.put_line(‘A is greatest’);ELSEdbms_output.put_line(‘C is greatest’);END IF;ELSE/*Nested-if2 */dbms_output.put_line('Checking Nested-IF 2' );IF( b> c ) THENdbms_output.put_line(’B is greatest' );ELSEdbms_output.put_line(’C is greatest' );END IF;END IF;dbms_output.put_line(‘Program completed.’ );END;/

Explicação do código:

  • Linha de código 2: Declarando a variável 'a' como tipo de dados 'NUMBER' e inicializando-a com o valor '10'.
  • Linha de código 3: Declarando a variável 'b' como tipo de dados 'NUMBER' e inicializando-a com o valor '15'.
  • Linha de código 4: Declarando a variável 'c' como tipo de dados 'NUMBER' e inicializando-a com o valor '20'.
  • Linha de código 6: Imprimindo a instrução "Programa iniciado" (linha 6).
  • Linha de código 7: Verificando a condição1, se 'a' é maior que 'b' (linha 7).
  • Linha de código 10: Se 'a' for maior que 'b, então a condição em' aninhado-se 1 'verificará se' a 'é maior que' c '(linha 10).
  • Linha de código 13: Se ainda 'a' for maior, a mensagem 'A é maior' será impressa (linha 11). Caso contrário, se a condição 2 falhar, então 'C é maior' será impresso (linha 13).
  • Linha de código 18: Caso a condição 1 retorne falsa, a condição em 'aninhada-se 2' verificará se 'b' é maior que 'c' (linha 18).
  • Linha de código 21: Se 'b' for maior que 'c', a mensagem 'B é maior' será impressa (linha 19), caso contrário, se a condição2 falhar, então 'C é maior' será impressa (linha 21).
  • Linha de código 24: Imprimindo a instrução "Programa concluído" (linha 24).

Saída de código:

Program started.Checking Nested-IF 2C is greatestProgram completed.

Resumo

Neste capítulo, aprendemos as diferentes instruções de tomada de decisão e sua sintaxe e exemplos. A tabela abaixo fornece o resumo de várias declarações condicionais que discutimos.

MODELO

DESCRIÇÃO

USO

SE ENTÃO

Verifica se há uma condição booleana, se o código TRUE no bloco 'ENTÃO' será executado.

Para pular, / execute um código específico com base na condição.

SE-ENTÃO-OUTRO

Verifica se há uma condição booleana, se o código TRUE no bloco 'ENTÃO' será executado, se o código falso no bloco 'ELSE' for executado.

Mais apropriado na condição 'ISSO-OU-ISSO'.

IF-THEN-ELSIF

Verifica se há uma condição booleana em ordem sequencial. O primeiro bloco na sequência que retorna a condição TRUE será executado. Se nenhuma das condições na sequência for TRUE, então o código no bloco 'ELSE' é executado.

Costumava escolher entre mais de duas alternativas, principalmente.

NESTED-IF

Permite uma ou mais instruções IF-THEN ou IF-THEN-ELSIF dentro de outra (s) instrução (ões) IF-THEN ou IF-THEN-ELSIF.

Usado principalmente em situação de condição aninhada.