Estructuras de Control PL-SQL
Estructuras de Control PL-SQL
Estructuras de Control PL-SQL
2) Expresiones CASE
3) Estructuras de BUCLE
A) Bucles simples B) Bucles WHILE C) Bucles FOR
4) GOTO y ETIQUETAS
A) Restricciones de GOTO B) Etiquetado
INTRODUCCION
PL/SQL (Procedural Language/Structured Query Language) es un lenguaje de programacin incrustado en Oracle. PL/SQL soportar todas las consultas, ya que la manipulacin de datos que se usa es la misma que en SQL, incluyendo nuevas caractersticas:
El lenguaje PL/SQL est incorporado en: En un entorno de base de datos los programadores pueden construir bloques PL/SQL para utilizarlos como procedimientos o funciones, o bien pueden escribir estos bloques como parte de scripts SQL*Plus. Los programas o paquetes de PL/SQL se pueden almacenar en la base de datos como otro objeto, y todos los usuarios que estn autorizados tienen acceso a estos paquetes. Los programas se ejecutan en el servidor para ahorrar recursos a los clientes.
Estructuras de control
En lenguajes de programacin, las estructuras de control permiten modificar el flujo de ejecucin de las instrucciones de un programa. Todas las estructuras de control tienen un nico punto de entrada y un nico punto de salida. Las estructuras de control se puede clasificar en : secuenciales, iterativas y de control avanzadas. Esto es una de las cosas que permite que la programacin se rija por los principios de la programacin estructurada. Los lenguajes de programacin modernos tienen estructuras de control similares. Bsicamente lo que vara entre las estructuras de control de los diferentes lenguajes es su sintaxis, cada lenguaje tiene una sintaxis propia para expresar la estructura. Las estructuras de control son bsicamente las mismas que podemos utilizar en cualquier lenguaje de programacin. La vamos a dividir en estructuras de control alternativas (IF) y estructuras de control repetitivas (WHILE, FOR, LOOP)
Su sintaxis es: IF <expresin_booleana> THEN Secuencia_de_rdenes; [ELSIF <expresin_booleana> THEN Secuencia_de_rdenes;] [ELSE Secuencia_de_rdenes;] END IF;
Donde <expresiones_booleanas> es cualquier expresin que de cmo resultado un valor booleano. Las clusulas ELSIF y ELSE son opcionales y puede haber tantas clusulas ELSIF como se quiera.
A) IF THEN Si se evala la condicin y resulta verdadera, se ejecutan uno o ms lneas de cdigo de programa. En el caso de que la condicin resulte ser falsa, NO se realiza NINGUNA accin.
IF fecha_nac<1-01-1970 THEN -- No termina con un ; salario:= salario *1.15; -- aumento de salario en un 15% END IF; Se pueden anidar varias instrucciones: IF fecha_nac<1-01-1970 THEN IF apellido =Martnez THEN -- IF ANIDADO salario:= salario *1.15; -- aumento de salario en un 15% END IF; -- END IF OBLIGATORIO END IF;
B) IF THEN ELSE Si se evala la condicin y resulta verdadera, se ejecutan uno o ms lneas de cdigo de programa. En el caso de que la condicin resulte ser falsa, se ejecutan las instrucciones que siguen a la instruccin ELSE.
IF fecha_nac<1-01-1970 THEN -- No termina con un ; salario:= salario *1.15; -- aumento de salario en un 15% ELSE -- No termina con un ; salario:= salario* 1.05; -- aumento de salario en un 5% END IF;
Se pueden anidar varias instrucciones IF-THEN-ELSE. Slo se permite una instruccin ELSE en cada instruccin IF .
C) IF THEN ELSIF Si se evala la condicin y resulta verdadera, se ejecutan uno o ms lneas de cdigo de programa. En el caso de que la condicin resulte ser falsa, se evala la condicin especificada en el ELSIF.
IF apellido =Prez THEN salario:= salario *1.10; -- aumento de salario en un 10% ELSIF apellido =Martnez THEN salario:= salario *1.15; -- aumento de salario en un 15% ELSIF apellido=Alvarez THEN salario:= salario *1.20; -- aumento de salario en un 20% ELSE salario:= salario* 1.05; -- aumento de salario en un 5% END IF; -- Slo se necesita un nico END IF
3) Estructuras de BUCLE
Para salir de un bucle le pondremos la orden EXIT, que su sentencia es: EXIT [WHEN <Condicin>]; Esta orden sera equivalente a: IF <Condicin> THEN EXIT; END IF;
EJEMPLO loop:
B) Bucles WHILE
Su sintaxis es: WHILE <Condicin> LOOP <Secuencia_de_rdenes>; END LOOP; Antes de entrar en el bucle evala la condicin, si es verdadera, entrar. Si la condicin es falsa o nula el bucle se termina. Hay que tener en cuenta que si la condicin del bucle no toma el valor TRUE la primera vez que se le comprueba el bucle, no llegar nunca a ejecutarse. Pueden usarse las rdenes EXIT o EXIT WHEN dentro de un bucle WHILE para salir del bucle, sin llegar a terminar la condicin.
EJEMPLO:
C) Bucles FOR
En el caso en que sepamos el nmero de iteraciones en que se ejecutarn los bucles simples y WHILE utilizaremos los bucles FOR. Su sintaxis es: FOR <contador_bucle> IN [ REVERSE ] menor . . mayor LOOP Secuencia_de_rdenes END LOOP; donde <contador_bucle> es una variable que no hace falta que se declare ya que lo hace de forma implcita como BINARY_INTEGER. Los valores menoresmayor muestra el rango en que se ejecutar el bucle.
EJEMPLO:
4) GOTO y etiquetas
Su sintaxis es: GOTO <Etiqueta>; donde <Etiqueta> es una etiqueta definida en el bloque PL/SQL. Al evaluar una orden GOTO el control pasa inmediatamente a la orden identificada por la etiqueta, por ejemplo: BEGIN DBMS_OUTPUT.PUT_LINE(Esto es un ejemplo.); GOTO Etiqueta_1; DBMS_OUTPUT.PUT_LINE(No hace el GOTO.); <<Etiqueta_1>> DBMS_OUTPUT.PUT_LINE(Entra en el GOTO.); END;
Ejemplo:
4) GOTO y etiquetas
USO: Para hacer ms legible el bloque de ejecucin con manejadores de Excepciones complejos en bloques anidados.
Restricciones de GOTO No se puede saltar al interior de un bloque anidado No se puede saltar al interior de un bucle No se puede saltar al interior de una orden IF
Etiquetado A los bucles pueden ponrseles etiquetas de forma que las usemos en la sentencia EXIT. En el caso de que se le aada una etiqueta a un bucle habr que ponerla tambin al final del bucle