SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
Bases de Datos



                   Unidad



          El Lenguaje PL/SQL




            2011   Erwin Fischer   2
PL/SQL

 • Es una extensión procedimental de SQL
   diseñada por Oracle
 • Se basa en conceptos similares a los lenguajes
   de programación modernos. (declaracion de
   variables y constantes, estructuras de control, manejo
   de excepciones y modularización).
 • Es un lenguaje con estructura de bloques: Los
   bloques pueden ser completamente
   independientes o estar anidados uno dentro de
   otros
 • Las unidades básicas son : Procedimientos,
   funciones y bloques anonimos.

                       2011   Erwin Fischer                 3
Estructura general de un bloque
PL/SQL

  [DECLARE                                     Opcional
     - declaraciones]

  BEGIN                                        Obligatorio
     - instrucciones ejecutables

  [EXCEPTION                             Opcional
     - rutinas de manejo de excepciones]

  END;                                         Obligatorio




                        2011   Erwin Fischer                 4
Declaraciones en PL/SQL

 • Las variables y constantes deben declararse antes de
   poder referenciarlas.
 • Ej:
    – vNumEmpleado              VARCHAR2(5);
    – vRenta                    NUMBER(6,2) NOT NULL := 600;
    – MAX_PROPIEDADES           CONSTANT NUMBER := 100

 • Es posible declarar variables de acuerdo al tipo de
   otras variables
     • vNumEmpleado Empleado.numEmpleado%TYPE;
     • vNumEmpleado1 vNumEmpleado%TYPE;
     • beerTuple Beers%ROWTYPE;


                      2011   Erwin Fischer                     5
Asignaciones en PL/SQL

 • Se pueden asignar variables de dos formas
   distintas: Utilizando (:=) o como resultado de
   una instrucción SELECT o FETCH
 • Ej:
   – vNumEmpleado := ‘SG14’;
   – vRenta := 500;

   – SELECT COUNT(*) INTO                  X
     FROM Propiedad
     WHERE numEmpleado = vNumEmpleado;


                    2011   Erwin Fischer            6
Un programa Simple en PL/SQL
 drop table T1; // Se elimina la tabla en caso que exista, si no existe da un error, pero no importa
 CREATE TABLE T1(
  e INTEGER,
  f INTEGER
 );
 Begin
  DELETE FROM T1;
  INSERT INTO T1 VALUES(1, 3);
  INSERT INTO T1 VALUES(2, 4);
 End

 select * from t1
 /* Lo de arriba es SQL; debajo es el programa PL/SQL */
 DECLARE
    a NUMBER;
    b NUMBER;
 BEGIN
    SELECT e,f INTO a,b
    FROM T1
    WHERE e>1;// Este select asigna el atributo     e->a y f->b, de todos aquellos registros cuyo atributo e > 1

    INSERT INTO T1 VALUES(b,a);
 END;



                                          2011   Erwin Fischer                                                     7
Veamos que ocurre 1



 • Se crea la tabla t1 y se insertan
   dos registros.




               2011   Erwin Fischer    8
El procedimiento anónimo

             select * from t1

   DECLARE
      a NUMBER;
      b NUMBER;
   BEGIN
      SELECT e,f INTO a,b
      FROM T1
      WHERE e>1
      INSERT INTO T1 VALUES(b,a);
   END;

               select * from t1


                  2011   Erwin Fischer   9
¿Qué ocurre si ejecuto nuevamente el
procedimiento anónimo?
• Escribir en el Blog, una explicación
  a lo que ocurre al ejecutar
  nuevamente el procedimiento:
                          DECLARE
                             a NUMBER;
select * from t1
                             b NUMBER;
                          BEGIN
                             SELECT e,f INTO a,b
                             FROM T1
                             WHERE e>1
                             INSERT INTO T1 VALUES(b,a);
                          END;

                   2011   Erwin Fischer                    10
Instrucciones de Control en
PL/SQL

 • PL/SQL soporta los mecanismos
   habituales de control de flujo condicional,
   iterativo y secuencial

 •   IF-THEN-ELSE-END IF;
 •   LOOP-EXIT WHEN-END LOOP;
 •   FOR-END LOOP;
 •   WHILE-END LOOP;
 •   GOTO;
                  2011   Erwin Fischer           11
Instrucción IF
 Syntax #1: IF-THEN
 IF condition THEN
             {...statements...}
    END IF;

 Syntax #2: IF-THEN-ELSE
 IF condition THEN
             {...statements...}
    ELSE
             {...statements...}
    END IF;

 Syntax #3: IF-THEN-ELSIF
 IF condition THEN
             {...statements...}
    ELSIF condition THEN
             {...statements...}
    ELSE
             {...statements...}
    END IF;




                             2011   Erwin Fischer   12
Un programa Simple en PL/SQL

 DECLARE
   a NUMBER;
   b NUMBER;
 BEGIN
   SELECT e,f INTO a,b FROM T1 WHERE e>1;
   IF b=1 THEN
       INSERT INTO T1 VALUES(b,a);
   ELSE
       INSERT INTO T1 VALUES(b+10,a+10);
   END IF;
 END;
                 2011   Erwin Fischer       13
¿Qué hace este
Procedimiento anónimo?
select * from t1

 DECLARE
   a NUMBER;
   b NUMBER;
 BEGIN
   SELECT e,f INTO a,b FROM T1 WHERE e>1;
   IF b=1 THEN
       INSERT INTO T1 VALUES(b,a);
   ELSE
       INSERT INTO T1 VALUES(b+10,a+10);
   END IF;
 END;


                    2011   Erwin Fischer    14
Instrucción Loop


 LOOP
      {.statements.}
 END LOOP;
 Ejemplo

   LOOP
          monthly_value := daily_value * 31;
          EXIT WHEN monthly_value > 4000;
   END LOOP;


                  2011   Erwin Fischer         15
Un programa Simple en PL/SQL

 DECLARE
       i NUMBER := 1;
 BEGIN
       LOOP
             INSERT INTO T1 VALUES(i,i);
             i := i+1;
             EXIT WHEN i>100;
       END LOOP;
 END;



                  2011   Erwin Fischer     16
El ciclo FOR



 FOR loop_counter IN [REVERSE]
  lowest_number..highest_number
 LOOP
       {.statements.}
 END LOOP;




               2011   Erwin Fischer   17
Ejemplos de Ciclo FOR


 FOR Lcntr IN 1..20                FOR Lcntr IN REVERSE 1..15
 LOOP                              LOOP
      LCalc := Lcntr * 31;              LCalc := Lcntr * 31;
 END LOOP;                         END LOOP;




                     2011   Erwin Fischer                       18
El Ciclo While



 WHILE condition
 LOOP
       {.statements.}
 END LOOP;




             2011   Erwin Fischer   19
Ejemplo de ciclo While


 WHILE monthly_value <= 4000
 LOOP
     monthly_value := daily_value * 31;
 END LOOP;




              2011   Erwin Fischer        20
Cursores




2011   Erwin Fischer   21
Cursores

 • La instrucción SELECT puede utilizarse si la consulta
   devuelve una fila y solo una fila.
 • Los cursores se utilizan para el tratamiento de una
   consulta que pueda devolver un numero arbitrario de
   filas (es decir cero, una o más filas)
 • En la practica el cursor actúa como un puntero que
   dirige hacia una fila concreta el resultado de la
   consulta.
 • El cursor puede avanzar una posición para acceder a la
   siguiente fila.
 • Es necesario declarar y abrir los
   cursores antes de utilizarlos

                     2011   Erwin Fischer                   22
Cursores, un Ejemplo

1. DECLARE
2.   vIdEmpleado employees.employee_id%TYPE;
3.   vNombre      employees.first_name%TYPE;
4.   vApellido    employees.last_name%TYPE;
5.   CURSOR ListaEmpleadoCursor IS
6.   SELECT employee_id, first_name, last_name FROM employees FOR UPDATE;
7.   BEGIN
8.    OPEN ListaEmpleadoCursor;
9.      LOOP
10.      FETCH ListaEmpleadoCursor INTO vIdEmpleado, vNombre, vApellido;
11.      EXIT WHEN ListaEmpleadoCursor%NOTFOUND;
12.      dbms_output.put_line ('Id : '||vIdEmpleado
13.                          ||' Nombre : '|| vNombre
14.                          || 'Apellido : '|| vApellido);
15.     END LOOP;
16.     CLOSE ListaEmpleadoCursor;
17. END;



                            2011   Erwin Fischer                            23
Un cursor dentro de otro
cursor - obtieneTablas


 • Un cursor que lista todas las tablas
   con sus respectivas columnas,
   correspondiente al propietario HR




               2011   Erwin Fischer       24
Tablas all_tables y all_tab_columns


 select distinct tablas.owner, tablas.table_name
     from all_tables tablas
     where tablas.owner = 'HR';



 select distinct col.column_name
     from all_tab_columns col
     where upper(col.owner) = 'HR'
     and lower(col.table_name) = 'employees';




                   2011   Erwin Fischer            25
Declarando las Variables y
los cursores

   DECLARE
    vPropietario             varchar2(40);
    vNombreTabla             varchar2(40);
    vNombreColumna           varchar2(100);

    /* Primer cursor */
    cursor obtieneTablas is
    select distinct t.owner, t.table_name
    from all_tables t
    where t.owner = 'HR';

    /* Segundo cursor */
    cursor obtieneColumnas is
    select distinct c.column_name
    from all_tab_columns c
    where c.owner = vPropietario
    and c.table_name = vNombreTabla;



                             2011   Erwin Fischer   26
El cuerpo del cursor
begin
   open obtieneTablas;
   dbms_output.put_line('Abriendo Cursor - obtieneTablas');
   loop fetch obtieneTablas into vPropietario, vNombreTabla;
       exit when obtieneTablas%NOTFOUND;
       dbms_output.put_line('Tabla : ‘||Propietario||'.'||vNombreTabla);
       open obtieneColumnas;
       loop fetch obtieneColumnas into vNombreColumna;
         exit when obtieneColumnas%NOTFOUND;
         dbms_output.put_line(‘=>’||vNombreTabla||'.'||vNombreColumna);
       end loop;
       close obtieneColumnas;
   end loop;
   close obtieneTablas;
   EXCEPTION
   WHEN OTHERS THEN
   raise_application_error(-20001,'Se ha detectado un error -
   '||SQLCODE||' -ERROR- '||SQLERRM);
end;
                           2011   Erwin Fischer                       27
Paso de Parámetros en Cursores

CURSOR obtieneTablas(pPropietario VARCHAR2) IS
   select distinct t.owner, t.table_name
   from all_tables t
   where t.owner = pPropietario;

Con lo que podríamos abrir el cursor

OPEN obtieneTablas (´HR’);
OPEN obtieneTablas(´SYSTEM’);

Actividad : Modifique el cursor aplicando paso de parámetros, y
  publique en su blog.



                          2011   Erwin Fischer                    28
Tarea Cursor ParImpar
 • Agregue un atributo a la tabla EMPLOYEES,
   denominado TipoId, que va a contener un
   string.
 • Desarrolle un cursor que permita completar
   dicho atributo de acuerdo al siguiente criterio:

       SI employee_id es Par
         Entonces
              TipoId = ‘PAR’
       Si-no
              TipoId = ‘IMPAR’
 • Suba la solución a su Blog HOY.

 •                   2011   Erwin Fischer             29
Unidad - PL/SQL




        • Fin




            2011   Erwin Fischer   30

Weitere ähnliche Inhalte

Was ist angesagt?

10. aplicaciones de las pilas
10. aplicaciones de las pilas10. aplicaciones de las pilas
10. aplicaciones de las pilas
Andreita Enriquez
 
Notación infija postfija
Notación infija postfijaNotación infija postfija
Notación infija postfija
Omarzingm
 
Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)
Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)
Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)
Maztherprozh
 
Estructura de instrucciones de control...
Estructura de instrucciones de control...Estructura de instrucciones de control...
Estructura de instrucciones de control...
Susana Moyolema
 

Was ist angesagt? (19)

PL SQL Diplomado Oracle
PL SQL Diplomado OraclePL SQL Diplomado Oracle
PL SQL Diplomado Oracle
 
Introduccion clips
Introduccion clipsIntroduccion clips
Introduccion clips
 
Pl
PlPl
Pl
 
10. aplicaciones de las pilas
10. aplicaciones de las pilas10. aplicaciones de las pilas
10. aplicaciones de las pilas
 
Curso Básico de Pl Sql Oracle
Curso Básico de Pl Sql OracleCurso Básico de Pl Sql Oracle
Curso Básico de Pl Sql Oracle
 
Notación infija postfija
Notación infija postfijaNotación infija postfija
Notación infija postfija
 
Cap I Plsql
Cap I PlsqlCap I Plsql
Cap I Plsql
 
Guia 5 3 2015 c2
Guia 5 3 2015 c2Guia 5 3 2015 c2
Guia 5 3 2015 c2
 
Listasde Acceso
Listasde AccesoListasde Acceso
Listasde Acceso
 
instrucciónes basicas para c++
instrucciónes basicas para c++instrucciónes basicas para c++
instrucciónes basicas para c++
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Estructuradatospilasycolas 121106170754-phpapp02
Estructuradatospilasycolas 121106170754-phpapp02Estructuradatospilasycolas 121106170754-phpapp02
Estructuradatospilasycolas 121106170754-phpapp02
 
Funciones en C++
Funciones en C++Funciones en C++
Funciones en C++
 
Operadores
OperadoresOperadores
Operadores
 
Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)
Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)
Estructurabsicadeunprogramaendevc 140605195118-phpapp02(2)
 
Componentes en bloques del procesador
Componentes en bloques del procesadorComponentes en bloques del procesador
Componentes en bloques del procesador
 
Pila dinamica y pila estatica
Pila dinamica y pila estaticaPila dinamica y pila estatica
Pila dinamica y pila estatica
 
Guia flip flop
Guia flip flopGuia flip flop
Guia flip flop
 
Estructura de instrucciones de control...
Estructura de instrucciones de control...Estructura de instrucciones de control...
Estructura de instrucciones de control...
 

Ähnlich wie Sql

Lenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de ControlLenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de Control
Karina Arguedas Ruelas
 
Organizacion-de-la-unidad-central-de-procesamiento
Organizacion-de-la-unidad-central-de-procesamientoOrganizacion-de-la-unidad-central-de-procesamiento
Organizacion-de-la-unidad-central-de-procesamiento
José Luis Olivares
 
Conceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sqlConceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sql
Andrei Hortúa
 
Semana 5 y 6 cursores implícitos y explícitos
Semana 5 y 6 cursores implícitos y explícitosSemana 5 y 6 cursores implícitos y explícitos
Semana 5 y 6 cursores implícitos y explícitos
victdiazm
 
Estructuras control java-
Estructuras control java-Estructuras control java-
Estructuras control java-
SENA
 

Ähnlich wie Sql (20)

Pl
PlPl
Pl
 
Programacion Avanzada JavaScript
Programacion Avanzada JavaScriptProgramacion Avanzada JavaScript
Programacion Avanzada JavaScript
 
Lenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de ControlLenguaje Borland C - Estructuras de Control
Lenguaje Borland C - Estructuras de Control
 
Turbo c++ 3.0
Turbo c++ 3.0Turbo c++ 3.0
Turbo c++ 3.0
 
Lecc01
Lecc01Lecc01
Lecc01
 
Procedimientos y excepciones
Procedimientos y excepcionesProcedimientos y excepciones
Procedimientos y excepciones
 
Assembler
AssemblerAssembler
Assembler
 
Organizacion-de-la-unidad-central-de-procesamiento
Organizacion-de-la-unidad-central-de-procesamientoOrganizacion-de-la-unidad-central-de-procesamiento
Organizacion-de-la-unidad-central-de-procesamiento
 
Estructura de instrucciones de control
Estructura de instrucciones de controlEstructura de instrucciones de control
Estructura de instrucciones de control
 
Apunte plsql
Apunte plsqlApunte plsql
Apunte plsql
 
PLSQL y paquetes
PLSQL y paquetesPLSQL y paquetes
PLSQL y paquetes
 
PLC-II EMERSON EDUARDO RODRIGUES ENGENHEIRO.pdf
PLC-II EMERSON EDUARDO RODRIGUES ENGENHEIRO.pdfPLC-II EMERSON EDUARDO RODRIGUES ENGENHEIRO.pdf
PLC-II EMERSON EDUARDO RODRIGUES ENGENHEIRO.pdf
 
Teoria
TeoriaTeoria
Teoria
 
Conceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sqlConceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sql
 
Pl Sql
Pl SqlPl Sql
Pl Sql
 
1 clase de Ps /sql
    1  clase  de  Ps /sql     1  clase  de  Ps /sql
1 clase de Ps /sql
 
Semana 5 y 6 cursores implícitos y explícitos
Semana 5 y 6 cursores implícitos y explícitosSemana 5 y 6 cursores implícitos y explícitos
Semana 5 y 6 cursores implícitos y explícitos
 
Estructuras control java-
Estructuras control java-Estructuras control java-
Estructuras control java-
 
71946780 manual-pl-sql-espanol
71946780 manual-pl-sql-espanol71946780 manual-pl-sql-espanol
71946780 manual-pl-sql-espanol
 
Funciones
FuncionesFunciones
Funciones
 

Kürzlich hochgeladen

PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
lupitavic
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
NancyLoaa
 
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
MiNeyi1
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
patriciaines1993
 

Kürzlich hochgeladen (20)

ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonables
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 

Sql

  • 1. Bases de Datos Unidad El Lenguaje PL/SQL 2011 Erwin Fischer 2
  • 2. PL/SQL • Es una extensión procedimental de SQL diseñada por Oracle • Se basa en conceptos similares a los lenguajes de programación modernos. (declaracion de variables y constantes, estructuras de control, manejo de excepciones y modularización). • Es un lenguaje con estructura de bloques: Los bloques pueden ser completamente independientes o estar anidados uno dentro de otros • Las unidades básicas son : Procedimientos, funciones y bloques anonimos. 2011 Erwin Fischer 3
  • 3. Estructura general de un bloque PL/SQL [DECLARE Opcional - declaraciones] BEGIN Obligatorio - instrucciones ejecutables [EXCEPTION Opcional - rutinas de manejo de excepciones] END; Obligatorio 2011 Erwin Fischer 4
  • 4. Declaraciones en PL/SQL • Las variables y constantes deben declararse antes de poder referenciarlas. • Ej: – vNumEmpleado VARCHAR2(5); – vRenta NUMBER(6,2) NOT NULL := 600; – MAX_PROPIEDADES CONSTANT NUMBER := 100 • Es posible declarar variables de acuerdo al tipo de otras variables • vNumEmpleado Empleado.numEmpleado%TYPE; • vNumEmpleado1 vNumEmpleado%TYPE; • beerTuple Beers%ROWTYPE; 2011 Erwin Fischer 5
  • 5. Asignaciones en PL/SQL • Se pueden asignar variables de dos formas distintas: Utilizando (:=) o como resultado de una instrucción SELECT o FETCH • Ej: – vNumEmpleado := ‘SG14’; – vRenta := 500; – SELECT COUNT(*) INTO X FROM Propiedad WHERE numEmpleado = vNumEmpleado; 2011 Erwin Fischer 6
  • 6. Un programa Simple en PL/SQL drop table T1; // Se elimina la tabla en caso que exista, si no existe da un error, pero no importa CREATE TABLE T1( e INTEGER, f INTEGER ); Begin DELETE FROM T1; INSERT INTO T1 VALUES(1, 3); INSERT INTO T1 VALUES(2, 4); End select * from t1 /* Lo de arriba es SQL; debajo es el programa PL/SQL */ DECLARE a NUMBER; b NUMBER; BEGIN SELECT e,f INTO a,b FROM T1 WHERE e>1;// Este select asigna el atributo e->a y f->b, de todos aquellos registros cuyo atributo e > 1 INSERT INTO T1 VALUES(b,a); END; 2011 Erwin Fischer 7
  • 7. Veamos que ocurre 1 • Se crea la tabla t1 y se insertan dos registros. 2011 Erwin Fischer 8
  • 8. El procedimiento anónimo select * from t1 DECLARE a NUMBER; b NUMBER; BEGIN SELECT e,f INTO a,b FROM T1 WHERE e>1 INSERT INTO T1 VALUES(b,a); END; select * from t1 2011 Erwin Fischer 9
  • 9. ¿Qué ocurre si ejecuto nuevamente el procedimiento anónimo? • Escribir en el Blog, una explicación a lo que ocurre al ejecutar nuevamente el procedimiento: DECLARE a NUMBER; select * from t1 b NUMBER; BEGIN SELECT e,f INTO a,b FROM T1 WHERE e>1 INSERT INTO T1 VALUES(b,a); END; 2011 Erwin Fischer 10
  • 10. Instrucciones de Control en PL/SQL • PL/SQL soporta los mecanismos habituales de control de flujo condicional, iterativo y secuencial • IF-THEN-ELSE-END IF; • LOOP-EXIT WHEN-END LOOP; • FOR-END LOOP; • WHILE-END LOOP; • GOTO; 2011 Erwin Fischer 11
  • 11. Instrucción IF Syntax #1: IF-THEN IF condition THEN {...statements...} END IF; Syntax #2: IF-THEN-ELSE IF condition THEN {...statements...} ELSE {...statements...} END IF; Syntax #3: IF-THEN-ELSIF IF condition THEN {...statements...} ELSIF condition THEN {...statements...} ELSE {...statements...} END IF; 2011 Erwin Fischer 12
  • 12. Un programa Simple en PL/SQL DECLARE a NUMBER; b NUMBER; BEGIN SELECT e,f INTO a,b FROM T1 WHERE e>1; IF b=1 THEN INSERT INTO T1 VALUES(b,a); ELSE INSERT INTO T1 VALUES(b+10,a+10); END IF; END; 2011 Erwin Fischer 13
  • 13. ¿Qué hace este Procedimiento anónimo? select * from t1 DECLARE a NUMBER; b NUMBER; BEGIN SELECT e,f INTO a,b FROM T1 WHERE e>1; IF b=1 THEN INSERT INTO T1 VALUES(b,a); ELSE INSERT INTO T1 VALUES(b+10,a+10); END IF; END; 2011 Erwin Fischer 14
  • 14. Instrucción Loop LOOP {.statements.} END LOOP; Ejemplo LOOP monthly_value := daily_value * 31; EXIT WHEN monthly_value > 4000; END LOOP; 2011 Erwin Fischer 15
  • 15. Un programa Simple en PL/SQL DECLARE i NUMBER := 1; BEGIN LOOP INSERT INTO T1 VALUES(i,i); i := i+1; EXIT WHEN i>100; END LOOP; END; 2011 Erwin Fischer 16
  • 16. El ciclo FOR FOR loop_counter IN [REVERSE] lowest_number..highest_number LOOP {.statements.} END LOOP; 2011 Erwin Fischer 17
  • 17. Ejemplos de Ciclo FOR FOR Lcntr IN 1..20 FOR Lcntr IN REVERSE 1..15 LOOP LOOP LCalc := Lcntr * 31; LCalc := Lcntr * 31; END LOOP; END LOOP; 2011 Erwin Fischer 18
  • 18. El Ciclo While WHILE condition LOOP {.statements.} END LOOP; 2011 Erwin Fischer 19
  • 19. Ejemplo de ciclo While WHILE monthly_value <= 4000 LOOP monthly_value := daily_value * 31; END LOOP; 2011 Erwin Fischer 20
  • 20. Cursores 2011 Erwin Fischer 21
  • 21. Cursores • La instrucción SELECT puede utilizarse si la consulta devuelve una fila y solo una fila. • Los cursores se utilizan para el tratamiento de una consulta que pueda devolver un numero arbitrario de filas (es decir cero, una o más filas) • En la practica el cursor actúa como un puntero que dirige hacia una fila concreta el resultado de la consulta. • El cursor puede avanzar una posición para acceder a la siguiente fila. • Es necesario declarar y abrir los cursores antes de utilizarlos 2011 Erwin Fischer 22
  • 22. Cursores, un Ejemplo 1. DECLARE 2. vIdEmpleado employees.employee_id%TYPE; 3. vNombre employees.first_name%TYPE; 4. vApellido employees.last_name%TYPE; 5. CURSOR ListaEmpleadoCursor IS 6. SELECT employee_id, first_name, last_name FROM employees FOR UPDATE; 7. BEGIN 8. OPEN ListaEmpleadoCursor; 9. LOOP 10. FETCH ListaEmpleadoCursor INTO vIdEmpleado, vNombre, vApellido; 11. EXIT WHEN ListaEmpleadoCursor%NOTFOUND; 12. dbms_output.put_line ('Id : '||vIdEmpleado 13. ||' Nombre : '|| vNombre 14. || 'Apellido : '|| vApellido); 15. END LOOP; 16. CLOSE ListaEmpleadoCursor; 17. END; 2011 Erwin Fischer 23
  • 23. Un cursor dentro de otro cursor - obtieneTablas • Un cursor que lista todas las tablas con sus respectivas columnas, correspondiente al propietario HR 2011 Erwin Fischer 24
  • 24. Tablas all_tables y all_tab_columns select distinct tablas.owner, tablas.table_name from all_tables tablas where tablas.owner = 'HR'; select distinct col.column_name from all_tab_columns col where upper(col.owner) = 'HR' and lower(col.table_name) = 'employees'; 2011 Erwin Fischer 25
  • 25. Declarando las Variables y los cursores DECLARE vPropietario varchar2(40); vNombreTabla varchar2(40); vNombreColumna varchar2(100); /* Primer cursor */ cursor obtieneTablas is select distinct t.owner, t.table_name from all_tables t where t.owner = 'HR'; /* Segundo cursor */ cursor obtieneColumnas is select distinct c.column_name from all_tab_columns c where c.owner = vPropietario and c.table_name = vNombreTabla; 2011 Erwin Fischer 26
  • 26. El cuerpo del cursor begin open obtieneTablas; dbms_output.put_line('Abriendo Cursor - obtieneTablas'); loop fetch obtieneTablas into vPropietario, vNombreTabla; exit when obtieneTablas%NOTFOUND; dbms_output.put_line('Tabla : ‘||Propietario||'.'||vNombreTabla); open obtieneColumnas; loop fetch obtieneColumnas into vNombreColumna; exit when obtieneColumnas%NOTFOUND; dbms_output.put_line(‘=>’||vNombreTabla||'.'||vNombreColumna); end loop; close obtieneColumnas; end loop; close obtieneTablas; EXCEPTION WHEN OTHERS THEN raise_application_error(-20001,'Se ha detectado un error - '||SQLCODE||' -ERROR- '||SQLERRM); end; 2011 Erwin Fischer 27
  • 27. Paso de Parámetros en Cursores CURSOR obtieneTablas(pPropietario VARCHAR2) IS select distinct t.owner, t.table_name from all_tables t where t.owner = pPropietario; Con lo que podríamos abrir el cursor OPEN obtieneTablas (´HR’); OPEN obtieneTablas(´SYSTEM’); Actividad : Modifique el cursor aplicando paso de parámetros, y publique en su blog. 2011 Erwin Fischer 28
  • 28. Tarea Cursor ParImpar • Agregue un atributo a la tabla EMPLOYEES, denominado TipoId, que va a contener un string. • Desarrolle un cursor que permita completar dicho atributo de acuerdo al siguiente criterio: SI employee_id es Par Entonces TipoId = ‘PAR’ Si-no TipoId = ‘IMPAR’ • Suba la solución a su Blog HOY. • 2011 Erwin Fischer 29
  • 29. Unidad - PL/SQL • Fin 2011 Erwin Fischer 30