Categorieën: Alle - bucles - etiquetas - condiciones - while

door Mikaela Sandoval 1 jaar geleden

84

SENTENCIAS DE CONTROL EN SQL

Las sentencias de control en SQL son esenciales para la gestión de flujos de trabajo en secuencias y bucles. La sentencia GOTO permite saltar a una etiqueta específica en el código, facilitando la ejecución no lineal.

SENTENCIAS DE CONTROL
EN SQL

SENTENCIAS DE CONTROL EN SQL

Type in your name.

SECUENCIAL

Type in the things you like.

GOTO
Permite cambiar la línea secuencial de la ejecución hacia una etiqueta.

Las etiquetas son marcadas con los símbolos >. Para ir dirigir la ejecución hacia una etiqueta simplemente hay que usar la sentencia GOTO:

DECLARE
  V_TOTAL    NUMBER(9) := 0;
  V_CONTADOR NUMBER(6) := 0;
BEGIN
  
  <<calcular>>
  V_CONTADOR := V_CONTADOR + 1;
  V_TOTAL := V_TOTAL + V_CONTADOR;
  
  IF V_TOTAL <= 20 THEN
    DBMS_OUTPUT.PUT_LINE('Valor de V_TOTAL:' || V_TOTAL);
    GOTO calcular;
  END IF;
END;



Valor de V_TOTAL:1

Valor de V_TOTAL:3

Valor de V_TOTAL:6

Valor de V_TOTAL:10

Valor de V_TOTAL:15

ITERATIVO

Type in the personality traits you have.

Permiten ejecutar varias instrucciones múltiples veces. A éstas sentencias también se les conoce por el nombre de bucles repetitivos.

LOOP
Permite ejecutar un bloque de código de manera infinita, a diferencia de las otras sentencias iterativas, en la sentencia LOOP se debe utilizar la cláusula EXIT WHEN para colocar una condición para terminar el bucle

DECLARE
  V_TOTAL    NUMBER := 0;
  V_CONTADOR NUMBER := 0;
BEGIN
  LOOP
    V_CONTADOR := V_CONTADOR + 1;
    V_TOTAL := V_TOTAL + V_CONTADOR;
    DBMS_OUTPUT.PUT_LINE('Valor de V_TOTAL:' || V_TOTAL);
    EXIT WHEN V_TOTAL > 20;
  END LOOP;
END;


Valor de V_TOTAL:1

Valor de V_TOTAL:3

Valor de V_TOTAL:6

Valor de V_TOTAL:10

Valor de V_TOTAL:15

Valor de V_TOTAL:21

WHILE-LOOP
permite la ejecución de una o varias instrucciones. A diferencia de la sentencia FOR-LOOP, en WHILE-LOOP la ejecución se define a partir de una condición.

DECLARE
  V_NUM NUMBER := 1;
BEGIN
  WHILE V_NUM <= 13 LOOP
    DBMS_OUTPUT.PUT_LINE('El valor V_NUM es :' || V_NUM);
    V_NUM := V_NUM + 2.1;
  END LOOP;
END;


El valor V_NUM es :1

El valor V_NUM es :3,1

El valor V_NUM es :5,2

El valor V_NUM es :7,3

El valor V_NUM es :9,4

El valor V_NUM es :11,5

FOR-LOOP
Permite especificar un rango de números enteros, finalmente ejecuta una secuencia de instrucciones para cada número entero dentro de la lista de números.

BEGIN
  FOR i IN 1..12 LOOP
    DBMS_OUTPUT.PUT_LINE('7*' || i || '='|| (7*i));
  END LOOP;
END;



7*1=7

7*2=14

7*3=21

7*4=28

7*5=35

7*6=42

7*7=49

7*8=56

7*9=63

7*10=70

7*11=77

7*12=84

CONDICIONAL

Permite decidir por cuál alternativa seguirá el flujo del programa dependiendo del resultado de la evaluación de una condición.

Para establecer condiciones complejas se utilizan los operadores relacionales y lógicos.

CASE

Type in your birthdate.

Permite evaluar diferentes opciones, por cada opción se realiza una instrucción específica.

DECLARE
V_TIPO_TRABAJADOR VARCHAR2(2) := 'AR';
V_SALARIO         NUMBER;
V_TIENE_SALARIO   BOOLEAN;
BEGIN

  CASE
    WHEN V_TIPO_TRABAJADOR = 'AP' THEN
      V_SALARIO := 1500;
      V_TIENE_SALARIO := TRUE;
    WHEN V_TIPO_TRABAJADOR = 'AS' THEN
      V_SALARIO := 2300;
       V_TIENE_SALARIO := TRUE;
    WHEN V_TIPO_TRABAJADOR = 'JP' THEN
      V_SALARIO := 5000;
      V_TIENE_SALARIO := TRUE;
    ELSE
      V_TIENE_SALARIO := FALSE;
  END CASE;

  IF V_TIENE_SALARIO THEN
    DBMS_OUTPUT.PUT_LINE('El salario de un ' || V_TIPO_TRABAJADOR 
                         || ' es ' || V_SALARIO);
  ELSE
    DBMS_OUTPUT.PUT_LINE(V_TIPO_TRABAJADOR 
                         || ' no tiene un salario definido');
  END IF;
END;


AR no tiene un salario definido


IF-THEN-ELSE

Type in your age.

Permite la ejecución de una o varias líneas de código según una condición.

La condición se especifica en la cláusula IF, en caso de que la condición sea verdadera se ejecuta el bloque de código especificado bajo la cláusula THEN, en caso contrario se ejecuta el bloque de código especificado en la cláusula ELSE. La claúsula ELSE es opcional

DECLARE
/*Para poder ver la utilidad de éste script
basta con cambiar los valores de las variables
V_A y V_B según queramos. */
V_A NUMBER := 30;
V_B NUMBER := 30;
BEGIN
  /*En caso de que la variable V_A sea mayor
   se mostrará un mensaje*/
  IF V_A > V_B THEN
    dbms_output.put_line('V_A es mayor');
  ELSE
    dbms_output.put_line('V_B es mayor o igual que V_A');
  END IF;

END;


V_B es mayor o igual que V_A