19

Lenguaje Pl SQL

Embed Size (px)

DESCRIPTION

PL SQL

Citation preview

  • El lenguaje de programacin PL/SQLPL/SQL aplica las estructuras tpicas de un lenguaje de programacin a las sentencias SQL.PL/SQL, utiliza sentencias SQL para manipular datos en Oracle y estructuras de Control para organizar esta manipulacin de datos.Permite declarar constantes y variables, definir procedimientos y funciones y atrapar errores en tiempo de ejecucin.

  • Estructura bsica en PL/SQLEl Bloque de Cdigo:Cuando se escribe cdigo en PL/SQL, este debe estar agrupado en unidades denominadas bloques de cdigo. El cual puede contener otros sub. bloques. Un bloque de cdigo queda delimitado por las palabras reservadas BEGIN y END;Un bloque de cdigo se guarda en un fichero .SQL para su posterior uso, o guardarlo en la BD para que pueda ser ejecutado por cualquier aplicacin.

  • Un bloque PL/SQL tiene tres partes: La nica seccin obligatoria es la contenida entre BEGIN y END;[DECLARESeccin de declaracionesBEGINSentencias sentencias [EXCEPTIONManejo de excepcionesEND;

  • Ejecucin de un bloque de programacin PL/SQLEscriba el script del bloque y grbelo con la extensin .sqlCompile y ejecute @nom_bloque.sqlActive la consola para ver mensajes retornados: SET SERVEROUTPUT ON

  • Declaracin de Variables y ConstantesLas variables y constantes deben declararse dentro de la seccin DECLARE y deben seguir la siguiente sintaxis:

    Nombre_variable TIPO [:=Inicializacin]; Nombre_variable CONSTANT TIPO[:=Inicializacin]; Ejemplos: Interes NUMBER(5,3); Descricpion VARCHAR2(30):=inicial; Fecha_max Date; PI CONSTANT REAL:=3.14159;

  • Tipos de DatosTipo escalar no tiene componentes internos. Compuesto contiene componentes internos. Referencia almacena punteros. Un tipo lob permite guardar archivos en la BD.

  • Estructuras bsicas de ControlEL PL/SQL cuenta con estructuras:Control condicional: Sentencia IF.

    La sentencia IF permite ejecutar una secuencia de acciones condicionalmente, es decir si cumple la condicin a evaluar.Existen tres modos para esta instruccin:IF - THEN, IF THEN ELSE y IF THEN ELSIF.

  • Ejemplos de sentencias IF:IF condicin THEN Secuencia_de_sentenciasEND IF;

    IF condicin THEN Secuencia_de_sentencias_1ELSESecuencia_de_sentencias_2END IF;

    IF condicin THEN Secuencia_de_sentencias_1ELSIFSecuencia_de_sentencias_2ELSESecuencia_de_sentencias_3END IF;

  • Controles de Iteracin: LOOP y EXITLa sentencia LOOP permite ejecutar una secuencia de acciones mltiples veces.Existen tres modalidades para esta instruccin: LOOP, WHILE LOOP y FOR LOOP.LOOP

    El modo bsico de LOOP encierra una serie de acciones entre las palabras: LOOPSecuencias_ de_ instrucciones END LOOP;

  • EXITLa clusula EXIT obliga a loop a concluir incondicionalmente.

    LOOPIF rankin_credito

  • Etiquetas Los ciclos pueden ser rotulados. Estos identificadores son encerrados entre > y se encuentran al inicio de un LOOP.WHILE LOOP Esta sentencia se asocia a una condicin con una secuencia de sentencias entre las palabras clave LOOP y END LOOP,ejemplo:

    WHILE condicin LOOPSecuencia_de_sentenciasEND LOOP;

  • FOR - LOOP

    Si la variable contador no esta definida, PL/SQL define una de tipo entero y la libera al finalizar el ciclo. La que debe contener los valores comprendidos entre lmite inferior y superior.Los lmites de una iteracin pueden ser literales, variables, expresiones o funciones pero deben evaluarse como nmeros enteros.

    FOR contador IN [REVERSE] limite_inferior..limite_superior LOOPSecuencia de SentenciasEND LOOP;

  • Ejemplos de bloques PL/SQL--programa p2.sqlDECLAREa number(3) :=3;b number(3) :=4;c number(3);BEGINc:=a+b;dbms_output.put_line('hola el resultado es =>'||c);END;/

  • --programa p3.sqlDECLAREa number(3);b number(3);c number(3);BEGINc:=&a+&b;dbms_output.put_line('hola el resultado es =>'||c);END;/Ejemplos de bloques PL/SQL

  • --p4.sqlDECLARE esperada constant NUMBER(5) := 300; xtotal NUMBER; xcant NUMBER; xprom NUMBER;

    BEGINSELECT SUM(promingresos),COUNT(*) INTO xtotal,xcantFROM cliente WHERE fechanac= esperada THENxtotal:=1;INSERT INTO cliente VALUES ('0801583261','DIEGO','MARADONA','7689765',to_date('14/01/2005','dd/mm/yyyy'),890,'N','CUENCA');dbms_output.put_line('Inserccin satisfactoria');ELSEdbms_output.put_line(' El valor de xprom es mayor o igual a esperada=> no inserta'); END IF;END;/Ejemplos de bloques PL/SQL

  • --Ejemplo de Loop con el uso de EXITDECLAREv_Counter BINARY_INTEGER := 1;BEGINLOOP-- inserta una fila en la tabla temp_table con un nuevo valor -- de codigo en v_counterINSERT INTO temp_table VALUES (v_Counter, 'Loop index');v_Counter := v_Counter + 1;-- Termina la condicion cuando el codigo sea mayor a 50IF v_Counter > 50 THENEXIT;END IF;END LOOP;END;/ --Ejemplo de uso de EXIT - WHENDECLAREv_Counter BINARY_INTEGER := 1;BEGINLOOPINSERT INTO temp_tableVALUES (v_Counter, 'Loop index');v_Counter := v_Counter + 1; EXIT WHEN v_Counter > 50;END LOOP;END;/Ejemplos de bloques PL/SQL

  • Ejemplo de For DECLAREv_Counter BINARY_INTEGER;BEGINWHILE v_Counter
  • Ejemplos de Bloque de CdigoDECLAREv_NumberSeats rooms.number_seats%TYPE;v_Comment VARCHAR2(35);BEGIN/* Retrieve the number of seats in the room identified by ID 99999.Store the result in v_NumberSeats. */SELECT number_seatsINTO v_NumberSeatsFROM roomsWHERE room_id = 99999;IF v_NumberSeats < 50 THENv_Comment := 'Fairly small';ELSIF v_NumberSeats < 100 THENv_Comment := 'A little bigger';ELSEv_Comment := 'Lots of room';END IF;END;

    *

    *