SENTENCIAS DE CONTROL
EN SQL

CONDICIONAL

c1

IF-THEN-ELSE

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

r

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

CASE

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

r

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

ITERATIVO

c1

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.

r

BEGIN FOR i IN 1..12 LOOP DBMS_OUTPUT.PUT_LINE('7*' || i || '='|| (7*i)); END LOOP; END; 7*1=77*2=147*3=217*4=287*5=357*6=427*7=497*8=567*9=637*10=707*11=777*12=84

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.

r

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 :1El valor V_NUM es :3,1El valor V_NUM es :5,2El valor V_NUM es :7,3El valor V_NUM es :9,4El valor V_NUM es :11,5

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

r

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:1Valor de V_TOTAL:3Valor de V_TOTAL:6Valor de V_TOTAL:10Valor de V_TOTAL:15Valor de V_TOTAL:21

SECUENCIAL

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:

r

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:1Valor de V_TOTAL:3Valor de V_TOTAL:6Valor de V_TOTAL:10Valor de V_TOTAL:15