SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Ejercicios de PL SQL
• Los siguientes ejercicios han sido
desarrollados basados en el esquema HR
• Si no lo tiene… ejecute los scripts que se le
proporcionaron.
TRIGGER(ORACLE)
• Bitácora de inserción, eliminación y actualización.
CREAR TABLAS PARA TRABAJAR TRIGGERS Y OTROS PROCESOS
CREATE TABLE EMP
(EMPNO NUMBER(3,0),
NOMBRE VARCHAR2(40),
TRABAJO VARCHAR2(20),
DEPNO NUMBER(3,0),
SALARIO NUMBER(8,2)
) ;
create table bitacora (accion char(20) NULL,empno
number(3,0) NULL);
TRIGGER(SQL)
• Bitácora de inserción, eliminación y actualización.
CREAR TABLAS PARA TRABAJAR TRIGGERS Y OTROS PROCESOS
CREATE TABLE EMP
(EMPNO NUMERIC(3,0),
NOMBRE VARCHAR(40),
TRABAJO VARCHAR(20),
DEPNO NUMERIC(3,0),
SALARIO NUMERIC(8,2)
) ;
create table bitacora (accion char(20) NULL,empno
numeric(3,0) NULL);
Trigger para hacer bitácora(ORACLE)
create or replace TRIGGER TR_EMP
BEFORE INSERT OR DELETE OR UPDATE ON EMP
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
BEGIN
IF INSERTING THEN INSERT INTO bitacora VALUES
('INSERTO',:NEW.EMPNO); END IF;
IF DELETING THEN INSERT INTO bitacora VALUES
('ELIMINO',:OLD.EMPNO); END IF;
IF UPDATING THEN INSERT INTO bitacora VALUES
('MODIFICO',:OLD.EMPNO); END IF;
END;
/
Trigger para hacer bitácora (sql)
Create TRIGGER TR_EMP
ON EMP
AFTER INSERT,DELETE,UPDATE
AS
DECLARE @nempleado int
BEGIN
SET NOCOUNT ON;
IF EXISTS(SELECT * FROM INSERTED)
begin
select @nempleado=empno from inserted
IF EXISTS(SELECT * FROM DELETED)
INSERT INTO bitacora VALUES ('MODIFICO',@nempleado)
ELSE
INSERT INTO bitacora VALUES ('ADICIONO',@nempleado)
end
ELSE IF EXISTS(SELECT * FROM DELETED)
begin
select @nempleado=empno from deleted
INSERT INTO bitacora VALUES ('ELIMINO', @nempleado)
end
END
Estructura de un bloque PL/SQL
en esquema HR(programa 1)
imprimir un valor cualquiera
set serveroutput on;
DECLARE
v_nombre employees.employee_id %
TYPE;
begin
v_nombre:=1;
dbms_output.put_line(v_nombre);
end;
Estructura de un bloque PL/SQL
en esquema HR(programa 2)
Salario mayor
DECLARE
v_mayor employees.salary % TYPE;
begin
v_mayor:=0;
select max(salary) into v_mayor
from employees;
dbms_output.put_line(v_mayor);
end;
Estructura de un bloque PL/SQL
en esquema HR(programa 3)
Salario mayor, menor … n variables
DECLARE
v_mayor employees.salary % TYPE;
v_menor employees.salary % TYPE;
begin
v_mayor:=0;
v_menor:=0;
select max(salary),min(salary) into v_mayor,v_menor
from employees ;
dbms_output.put_line('salario mayor es '|| to_char (v_mayor));
dbms_output.put_line('salario menor es '||to_char(v_menor));
End;
Estructura de un bloque PL/SQL
crear secuencias y una tabla para trabajar los programas
CREATE SEQUENCE NUMEMPLEADOS MINVALUE
0 MAXVALUE 1000 INCREMENT BY 1 START
WITH 0 CACHE 20 NOORDER NOCYCLE ;
EN BASE A UNA SECUENCIA GUARDAR INSERTAR
EMPLEADOS CON ESE CORRELATIVOS
DECLARE
v_empno emp.empno%TYPE;
BEGIN
SELECT NUMEMPLEADOS.NEXTVAL
INTO v_empno
FROM dual;
INSERT INTO emp(empno, nombre, trabajo, depno)
VALUES(v_empno, 'nombre'|| to_char
(v_empno),'AUXILIAR', 10);
Commit;
END;
INSERTAR 10 REGISTROS EN UN CICLO
FOR .. LOOP
DECLARE
BEGIN
FOR i IN 1..10 LOOP
INSERT INTO emp(empno, nombre)
VALUES(i, 'nombre'|| to_char (i));
END LOOP;
Commit;
END;
INSERTAR EN UN CICLO WHILE
desde un valor mínimo hasta un máximo
ACCEPT menor PROMPT 'Introduce el menor: '
ACCEPT mayor PROMPT 'Introduce el mayor: '
DECLARE
maximo number;
minimo number;
BEGIN
maximo:=0;
minimo:=0;
maximo:=to_number(&mayor);
minimo:=to_number(&menor);
WHILE maximo>= minimo LOOP
dbms_output.put_line(minimo);
INSERT INTO emp(empno, nombre, trabajo, depno)
VALUES(minimo, 'nombre'|| to_char (minimo),'AUXILIAR', 10);
minimo:= minimo+1;
END LOOP;
Commit;
END;
Uso de rowtype y cursor para imprimir
valores de una tabla(PLSQL)
DECLARE
CURSOR cemp IS
SELECT empno,nombre,depno
FROM emp;
cepm_rec cemp%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE
('no nombre depno');
FOR cemp_rec IN cemp
LOOP
DBMS_OUTPUT.PUT_LINE
(cemp_rec.empno || ' ' || cemp_rec.nombre|| ' ' ||
cemp_rec.depno);
END LOOP;
END;
PARA PRACTICAR CON LOS PROCEDIMIENTOS Y FUNCIONES,
AGREGUE UNA COLUMNA LLAMADA SALARIO A EMP Y
PONGALES VALORES FICTICIOS
• EJ. ALTER TABLE EMP ADD SALARIO NUMBER(12,2);
• UPDATE EMP SET SALARIO=2000;
O BORRAR LOS DATOS MANUALMENTE, AGREGAR
COLUMNA EN SQL DEVELOPER
Y TOMANDO DE BASE EL CODIGO QUE ESTA EN LA
LAMINA 8... MODIFICAR EL INSERT…
INSERT INTO emp(empno, nombre, trabajo, depno,
salario)
VALUES(minimo, 'nombre'|| to_char
(minimo),'AUXILIAR', 10,2000);
PROCEDIMIENTO1…(oracle)
modificar el salario del empleado n(salario x 1.1)
CREATE OR REPLACE PROCEDURE act_salario
(v_id in emp.empno%TYPE)
IS
BEGIN
UPDATE emp
SET salario = salario * 1.10
WHERE empno =v_id;
END act_salario;
/
Ejecutelo para el empleado 10
EXECUTE act_salario (10);
CREATE PROCEDURE act_salario( @numemp INT
OUTPUT )
AS
UPDATE emp
SET salario = salario * 1.10
WHERE empno = @numemp
EXEC dbo.act_salario @numemp = 2
PROCEDIMIENTO1…(SQL)
modificar el salario del empleado n(salario x 1.1)
CREATE OR REPLACE PROCEDURE act_sa2
(v_id in emp.empno%TYPE, v_sal in emp.salario%TYPE)
IS
BEGIN
UPDATE emp
SET salario = v_sal
WHERE empno =v_id;
END act_sa2;
/
Ejecutelo para el empleado 10
EXECUTE act_sa2 (10,3000);
PROCEDIMIENTO2…(oracle)
modificar el salario del empleado n, salario x
PROCEDIMIENTO2…(SQL)
modificar el salario del empleado n, salario x
CREATE PROCEDURE act_salario2( @numemp INT,
@nsalario DOUBLE OUTPUT )
AS
UPDATE emp
SET salario = @nsalario
WHERE empno = @numemp
EXEC dbo.act_salario2 @numemp = 2, @nsalario = 40
FUNCION EN PL SQL(ORACLE)
CREATE OR REPLACE FUNCTION obten_sal
(v_id IN emp.empno%TYPE)
RETURN NUMBER
IS
v_salario emp.salario%TYPE :=0;
BEGIN
SELECT salario INTO v_salary
FROM emp WHERE empno = v_id;
RETURN (v_salary);
END obten_sal;
EJECUCION DE FUNCION EN PL SQL(ORACLE)
VARIABLE g_salario number
EXECUTE :g_salario := obten_sal(1)
FUNCION EN TRANSACT SQL(SQL)
CREATE FUNCTION fn_ObtenSalario
(
@Numempl int
)
RETURNS DECIMAL(10,2)
AS
BEGIN
DECLARE @mSalario DECIMAL(10,2)
SELECT @mSalario = salario FROM emp WHERE empno=
@Numempl
RETURN @mSalario
END
EJECUCION DE FUNCION EN TRANSACT(SQL)
DECLARE @Numempl int, @Resultado DECIMAL(10,2)
SET @Numempl= 2
SET @Resultado =hr.dbo.fn_ObtenSalario(@Numempl)
PRINT @Resultado
Cursores en Transact SQL
Un cursor es una variable que nos permite recorrer con
un conjunto de resultados obtenido a través de una
sentencia SELECT fila a fila.
Cuando trabajemos con cursores debemos seguir los
siguientes pasos.
• Declarar el cursor, utilizando DECLARE
• Abrir el cursor, utilizando OPEN
• Leer los datos del cursor, utilizando FETCH ... INTO
• Cerrar el cursor, utilizando CLOSE
• Liberar el cursor, utilizando DEALLOCATE
CURSOR TRANSACT SQL
-- Declaracion de variables para el cursor
DECLARE @empno numeric(3,0),
@nombre varchar(40),
@trabajo varchar(20),
@depno numeric(3,0),
@salario numeric(12,2)
-- Declaración del cursor
DECLARE cEMP CURSOR FOR
SELECT empno, nombre, trabajo, depno, salario FROM EMP
-- Apertura del cursor
OPEN cEMP
CURSOR TRANSACT SQL
-- Lectura de la primera fila del cursor/ luego impresión en ciclo while
FETCH cEMP INTO @empno, @nombre, @trabajo, @depno, @salario
PRINT ' nemp nombre trabajo depno salario'
-- Lectura de la siguiente fila del cursor
WHILE (@@FETCH_STATUS = 0 )
BEGIN
PRINT STR(@empno)+' '+@nombre + ' ' +replicate ('*',40-LEN(@nombre))+' '+
@trabajo +' '+replicate ('*',20-LEN(@trabajo))+STR(@depno)+' '+STR( @salario)
-- Lectura de la siguiente fila del cursor
FETCH cEMP INTO @empno, @nombre, @trabajo, @depno, @salario
END
-- Cierre del cursor
CLOSE cEMP
-- Liberar los recursos
DEALLOCATE cEMP

Weitere ähnliche Inhalte

Was ist angesagt?

Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeansedgar muñoz
 
Programa en java para calcular promedios
Programa en java para calcular promediosPrograma en java para calcular promedios
Programa en java para calcular promediosCarmen Nereira
 
Ejercicios propuesto 3
Ejercicios propuesto 3Ejercicios propuesto 3
Ejercicios propuesto 3jfranco_123
 
Logaritmos y potencias con calculadora científica
Logaritmos y potencias con calculadora científicaLogaritmos y potencias con calculadora científica
Logaritmos y potencias con calculadora científicaJesús Fernández
 
Ejercicios resueltos de programacion
Ejercicios resueltos de programacionEjercicios resueltos de programacion
Ejercicios resueltos de programacionJaime amambal
 
Ejercicios de programacion concurrente
Ejercicios de programacion concurrenteEjercicios de programacion concurrente
Ejercicios de programacion concurrenteedgar muñoz
 
Calculadora casio fx_350_es[1][1][1]
Calculadora casio fx_350_es[1][1][1]Calculadora casio fx_350_es[1][1][1]
Calculadora casio fx_350_es[1][1][1]Brenda Hernandez
 
Calculadora casio fx 350 es[1]
Calculadora casio fx 350 es[1]Calculadora casio fx 350 es[1]
Calculadora casio fx 350 es[1]Brenda Hernandez
 
Unidad2 programas while , do while y for
Unidad2 programas while , do while  y forUnidad2 programas while , do while  y for
Unidad2 programas while , do while y forMiguel Angel Peña
 
Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)Kiim Kerrigan
 
Swrewer nuevo hoy
Swrewer nuevo hoySwrewer nuevo hoy
Swrewer nuevo hoyhtmrk
 

Was ist angesagt? (16)

Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeans
 
Programa en java para calcular promedios
Programa en java para calcular promediosPrograma en java para calcular promedios
Programa en java para calcular promedios
 
Hechos en clase
Hechos en claseHechos en clase
Hechos en clase
 
Ejercicios propuesto 3
Ejercicios propuesto 3Ejercicios propuesto 3
Ejercicios propuesto 3
 
Ventilador adaptativo
Ventilador adaptativoVentilador adaptativo
Ventilador adaptativo
 
Logaritmos y potencias con calculadora científica
Logaritmos y potencias con calculadora científicaLogaritmos y potencias con calculadora científica
Logaritmos y potencias con calculadora científica
 
Ejercicios resueltos de programacion
Ejercicios resueltos de programacionEjercicios resueltos de programacion
Ejercicios resueltos de programacion
 
Ejercicios de programacion concurrente
Ejercicios de programacion concurrenteEjercicios de programacion concurrente
Ejercicios de programacion concurrente
 
Aplicación Cliente - Servidor / GUI - Consola
Aplicación Cliente - Servidor / GUI - ConsolaAplicación Cliente - Servidor / GUI - Consola
Aplicación Cliente - Servidor / GUI - Consola
 
Unidad 2 informe tecnico
Unidad 2 informe tecnicoUnidad 2 informe tecnico
Unidad 2 informe tecnico
 
Calculadora casio fx_350_es[1][1][1]
Calculadora casio fx_350_es[1][1][1]Calculadora casio fx_350_es[1][1][1]
Calculadora casio fx_350_es[1][1][1]
 
Calculadora casio fx 350 es[1]
Calculadora casio fx 350 es[1]Calculadora casio fx 350 es[1]
Calculadora casio fx 350 es[1]
 
Desarrollo De Programas Ejemplos 01
Desarrollo De Programas Ejemplos 01Desarrollo De Programas Ejemplos 01
Desarrollo De Programas Ejemplos 01
 
Unidad2 programas while , do while y for
Unidad2 programas while , do while  y forUnidad2 programas while , do while  y for
Unidad2 programas while , do while y for
 
Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)
 
Swrewer nuevo hoy
Swrewer nuevo hoySwrewer nuevo hoy
Swrewer nuevo hoy
 

Ähnlich wie Ejercicios PL SQL

Command oracle
Command oracleCommand oracle
Command oraclednrdeleon
 
ORACLE EJERCICIO LABORATORIO
ORACLE EJERCICIO LABORATORIOORACLE EJERCICIO LABORATORIO
ORACLE EJERCICIO LABORATORIOSefira111
 
Mejoras en T-SQL para SQL Server 2005
Mejoras en T-SQL para SQL Server 2005Mejoras en T-SQL para SQL Server 2005
Mejoras en T-SQL para SQL Server 2005pabloesp
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql ServerCorfapo
 
Que es un algoritmo de jorge magaña
Que es un algoritmo de jorge magañaQue es un algoritmo de jorge magaña
Que es un algoritmo de jorge magañaJorge Ricardo
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejerciciostestgrupocomex
 
Trabajo final
Trabajo finalTrabajo final
Trabajo finalgmr979
 
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?Agile Spain
 
Programacin mysqlejercicios439-131027071437-phpapp01
Programacin mysqlejercicios439-131027071437-phpapp01Programacin mysqlejercicios439-131027071437-phpapp01
Programacin mysqlejercicios439-131027071437-phpapp01MaraMagdalenaBlancoR
 
Fundamentosdeprogramacion 2
Fundamentosdeprogramacion 2Fundamentosdeprogramacion 2
Fundamentosdeprogramacion 2agustin rojas
 
Solucion laboratorio lenguaje_transaccional
Solucion laboratorio lenguaje_transaccionalSolucion laboratorio lenguaje_transaccional
Solucion laboratorio lenguaje_transaccionalromero janeth
 

Ähnlich wie Ejercicios PL SQL (20)

Ejercicios resueltos de_pl-sql
Ejercicios resueltos de_pl-sqlEjercicios resueltos de_pl-sql
Ejercicios resueltos de_pl-sql
 
Command oracle
Command oracleCommand oracle
Command oracle
 
ORACLE EJERCICIO LABORATORIO
ORACLE EJERCICIO LABORATORIOORACLE EJERCICIO LABORATORIO
ORACLE EJERCICIO LABORATORIO
 
Triggers en SQL
Triggers en SQLTriggers en SQL
Triggers en SQL
 
Charla Mysql
Charla MysqlCharla Mysql
Charla Mysql
 
Oracle: Lenguaje SQL
Oracle: Lenguaje SQLOracle: Lenguaje SQL
Oracle: Lenguaje SQL
 
Mejoras en T-SQL para SQL Server 2005
Mejoras en T-SQL para SQL Server 2005Mejoras en T-SQL para SQL Server 2005
Mejoras en T-SQL para SQL Server 2005
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server
 
Ireport
IreportIreport
Ireport
 
Que es un algoritmo de jorge magaña
Que es un algoritmo de jorge magañaQue es un algoritmo de jorge magaña
Que es un algoritmo de jorge magaña
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Manual_Mysql Query Browser
Manual_Mysql Query BrowserManual_Mysql Query Browser
Manual_Mysql Query Browser
 
Trabajo final
Trabajo finalTrabajo final
Trabajo final
 
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?
 
Programacin mysqlejercicios439-131027071437-phpapp01
Programacin mysqlejercicios439-131027071437-phpapp01Programacin mysqlejercicios439-131027071437-phpapp01
Programacin mysqlejercicios439-131027071437-phpapp01
 
Funciones
FuncionesFunciones
Funciones
 
Fundamentosdeprogramacion 2
Fundamentosdeprogramacion 2Fundamentosdeprogramacion 2
Fundamentosdeprogramacion 2
 
Arreglos
ArreglosArreglos
Arreglos
 
Solucion laboratorio lenguaje_transaccional
Solucion laboratorio lenguaje_transaccionalSolucion laboratorio lenguaje_transaccional
Solucion laboratorio lenguaje_transaccional
 
Oracle sep 01
Oracle sep 01Oracle sep 01
Oracle sep 01
 

Mehr von Titiushko Jazz

Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)Titiushko Jazz
 
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)Titiushko Jazz
 
Unidad vii esp parte 2 introduccion a data warehouse y datamining
Unidad vii esp parte 2 introduccion a data warehouse y dataminingUnidad vii esp parte 2 introduccion a data warehouse y datamining
Unidad vii esp parte 2 introduccion a data warehouse y dataminingTitiushko Jazz
 
Unidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlUnidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlTitiushko Jazz
 
Tarea pronosticos eily
Tarea pronosticos eilyTarea pronosticos eily
Tarea pronosticos eilyTitiushko Jazz
 
Proyecto teórico práctico
Proyecto teórico prácticoProyecto teórico práctico
Proyecto teórico prácticoTitiushko Jazz
 

Mehr von Titiushko Jazz (20)

Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
Unidad vii esp parte 3 clase de inteligencia de negocios (datawarehouse)
 
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
Unidad vii esp parte 3 clase de datawarehouse ( ing. doño)
 
Unidad vii esp parte 2 introduccion a data warehouse y datamining
Unidad vii esp parte 2 introduccion a data warehouse y dataminingUnidad vii esp parte 2 introduccion a data warehouse y datamining
Unidad vii esp parte 2 introduccion a data warehouse y datamining
 
Unidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sqlUnidad vi esp parte 2 procesimientos en plsql y transact sql
Unidad vi esp parte 2 procesimientos en plsql y transact sql
 
Unidad ii esp parte 2
Unidad ii esp parte 2Unidad ii esp parte 2
Unidad ii esp parte 2
 
Unidad ii esp parte 1
Unidad ii esp parte 1Unidad ii esp parte 1
Unidad ii esp parte 1
 
Unidad i esp parte 2
Unidad i esp parte 2Unidad i esp parte 2
Unidad i esp parte 2
 
Unidad i esp parte 1
Unidad i esp parte 1Unidad i esp parte 1
Unidad i esp parte 1
 
Tarea pronosticos eily
Tarea pronosticos eilyTarea pronosticos eily
Tarea pronosticos eily
 
Sociedades limitadas
Sociedades limitadasSociedades limitadas
Sociedades limitadas
 
Rhu
RhuRhu
Rhu
 
Qué es un proyecto
Qué es un proyectoQué es un proyecto
Qué es un proyecto
 
Proyecto teórico práctico
Proyecto teórico prácticoProyecto teórico práctico
Proyecto teórico práctico
 
Presentacion1630
Presentacion1630Presentacion1630
Presentacion1630
 
Presentacion1410
Presentacion1410Presentacion1410
Presentacion1410
 
Presentacion1310
Presentacion1310Presentacion1310
Presentacion1310
 
Presentacion1210
Presentacion1210Presentacion1210
Presentacion1210
 
Presentacion1220
Presentacion1220Presentacion1220
Presentacion1220
 
Presentacion1001
Presentacion1001Presentacion1001
Presentacion1001
 
Presentacion810
Presentacion810Presentacion810
Presentacion810
 

Ejercicios PL SQL

  • 1. Ejercicios de PL SQL • Los siguientes ejercicios han sido desarrollados basados en el esquema HR • Si no lo tiene… ejecute los scripts que se le proporcionaron.
  • 2. TRIGGER(ORACLE) • Bitácora de inserción, eliminación y actualización. CREAR TABLAS PARA TRABAJAR TRIGGERS Y OTROS PROCESOS CREATE TABLE EMP (EMPNO NUMBER(3,0), NOMBRE VARCHAR2(40), TRABAJO VARCHAR2(20), DEPNO NUMBER(3,0), SALARIO NUMBER(8,2) ) ; create table bitacora (accion char(20) NULL,empno number(3,0) NULL);
  • 3. TRIGGER(SQL) • Bitácora de inserción, eliminación y actualización. CREAR TABLAS PARA TRABAJAR TRIGGERS Y OTROS PROCESOS CREATE TABLE EMP (EMPNO NUMERIC(3,0), NOMBRE VARCHAR(40), TRABAJO VARCHAR(20), DEPNO NUMERIC(3,0), SALARIO NUMERIC(8,2) ) ; create table bitacora (accion char(20) NULL,empno numeric(3,0) NULL);
  • 4. Trigger para hacer bitácora(ORACLE) create or replace TRIGGER TR_EMP BEFORE INSERT OR DELETE OR UPDATE ON EMP REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW DECLARE BEGIN IF INSERTING THEN INSERT INTO bitacora VALUES ('INSERTO',:NEW.EMPNO); END IF; IF DELETING THEN INSERT INTO bitacora VALUES ('ELIMINO',:OLD.EMPNO); END IF; IF UPDATING THEN INSERT INTO bitacora VALUES ('MODIFICO',:OLD.EMPNO); END IF; END; /
  • 5. Trigger para hacer bitácora (sql) Create TRIGGER TR_EMP ON EMP AFTER INSERT,DELETE,UPDATE AS DECLARE @nempleado int BEGIN SET NOCOUNT ON; IF EXISTS(SELECT * FROM INSERTED) begin select @nempleado=empno from inserted IF EXISTS(SELECT * FROM DELETED) INSERT INTO bitacora VALUES ('MODIFICO',@nempleado) ELSE INSERT INTO bitacora VALUES ('ADICIONO',@nempleado) end ELSE IF EXISTS(SELECT * FROM DELETED) begin select @nempleado=empno from deleted INSERT INTO bitacora VALUES ('ELIMINO', @nempleado) end END
  • 6. Estructura de un bloque PL/SQL en esquema HR(programa 1) imprimir un valor cualquiera set serveroutput on; DECLARE v_nombre employees.employee_id % TYPE; begin v_nombre:=1; dbms_output.put_line(v_nombre); end;
  • 7. Estructura de un bloque PL/SQL en esquema HR(programa 2) Salario mayor DECLARE v_mayor employees.salary % TYPE; begin v_mayor:=0; select max(salary) into v_mayor from employees; dbms_output.put_line(v_mayor); end;
  • 8. Estructura de un bloque PL/SQL en esquema HR(programa 3) Salario mayor, menor … n variables DECLARE v_mayor employees.salary % TYPE; v_menor employees.salary % TYPE; begin v_mayor:=0; v_menor:=0; select max(salary),min(salary) into v_mayor,v_menor from employees ; dbms_output.put_line('salario mayor es '|| to_char (v_mayor)); dbms_output.put_line('salario menor es '||to_char(v_menor)); End;
  • 9. Estructura de un bloque PL/SQL crear secuencias y una tabla para trabajar los programas CREATE SEQUENCE NUMEMPLEADOS MINVALUE 0 MAXVALUE 1000 INCREMENT BY 1 START WITH 0 CACHE 20 NOORDER NOCYCLE ;
  • 10. EN BASE A UNA SECUENCIA GUARDAR INSERTAR EMPLEADOS CON ESE CORRELATIVOS DECLARE v_empno emp.empno%TYPE; BEGIN SELECT NUMEMPLEADOS.NEXTVAL INTO v_empno FROM dual; INSERT INTO emp(empno, nombre, trabajo, depno) VALUES(v_empno, 'nombre'|| to_char (v_empno),'AUXILIAR', 10); Commit; END;
  • 11. INSERTAR 10 REGISTROS EN UN CICLO FOR .. LOOP DECLARE BEGIN FOR i IN 1..10 LOOP INSERT INTO emp(empno, nombre) VALUES(i, 'nombre'|| to_char (i)); END LOOP; Commit; END;
  • 12. INSERTAR EN UN CICLO WHILE desde un valor mínimo hasta un máximo ACCEPT menor PROMPT 'Introduce el menor: ' ACCEPT mayor PROMPT 'Introduce el mayor: ' DECLARE maximo number; minimo number; BEGIN maximo:=0; minimo:=0; maximo:=to_number(&mayor); minimo:=to_number(&menor); WHILE maximo>= minimo LOOP dbms_output.put_line(minimo); INSERT INTO emp(empno, nombre, trabajo, depno) VALUES(minimo, 'nombre'|| to_char (minimo),'AUXILIAR', 10); minimo:= minimo+1; END LOOP; Commit; END;
  • 13. Uso de rowtype y cursor para imprimir valores de una tabla(PLSQL) DECLARE CURSOR cemp IS SELECT empno,nombre,depno FROM emp; cepm_rec cemp%ROWTYPE; BEGIN DBMS_OUTPUT.PUT_LINE ('no nombre depno'); FOR cemp_rec IN cemp LOOP DBMS_OUTPUT.PUT_LINE (cemp_rec.empno || ' ' || cemp_rec.nombre|| ' ' || cemp_rec.depno); END LOOP; END;
  • 14. PARA PRACTICAR CON LOS PROCEDIMIENTOS Y FUNCIONES, AGREGUE UNA COLUMNA LLAMADA SALARIO A EMP Y PONGALES VALORES FICTICIOS • EJ. ALTER TABLE EMP ADD SALARIO NUMBER(12,2); • UPDATE EMP SET SALARIO=2000; O BORRAR LOS DATOS MANUALMENTE, AGREGAR COLUMNA EN SQL DEVELOPER Y TOMANDO DE BASE EL CODIGO QUE ESTA EN LA LAMINA 8... MODIFICAR EL INSERT… INSERT INTO emp(empno, nombre, trabajo, depno, salario) VALUES(minimo, 'nombre'|| to_char (minimo),'AUXILIAR', 10,2000);
  • 15. PROCEDIMIENTO1…(oracle) modificar el salario del empleado n(salario x 1.1) CREATE OR REPLACE PROCEDURE act_salario (v_id in emp.empno%TYPE) IS BEGIN UPDATE emp SET salario = salario * 1.10 WHERE empno =v_id; END act_salario; / Ejecutelo para el empleado 10 EXECUTE act_salario (10);
  • 16. CREATE PROCEDURE act_salario( @numemp INT OUTPUT ) AS UPDATE emp SET salario = salario * 1.10 WHERE empno = @numemp EXEC dbo.act_salario @numemp = 2 PROCEDIMIENTO1…(SQL) modificar el salario del empleado n(salario x 1.1)
  • 17. CREATE OR REPLACE PROCEDURE act_sa2 (v_id in emp.empno%TYPE, v_sal in emp.salario%TYPE) IS BEGIN UPDATE emp SET salario = v_sal WHERE empno =v_id; END act_sa2; / Ejecutelo para el empleado 10 EXECUTE act_sa2 (10,3000); PROCEDIMIENTO2…(oracle) modificar el salario del empleado n, salario x
  • 18. PROCEDIMIENTO2…(SQL) modificar el salario del empleado n, salario x CREATE PROCEDURE act_salario2( @numemp INT, @nsalario DOUBLE OUTPUT ) AS UPDATE emp SET salario = @nsalario WHERE empno = @numemp EXEC dbo.act_salario2 @numemp = 2, @nsalario = 40
  • 19. FUNCION EN PL SQL(ORACLE) CREATE OR REPLACE FUNCTION obten_sal (v_id IN emp.empno%TYPE) RETURN NUMBER IS v_salario emp.salario%TYPE :=0; BEGIN SELECT salario INTO v_salary FROM emp WHERE empno = v_id; RETURN (v_salary); END obten_sal;
  • 20. EJECUCION DE FUNCION EN PL SQL(ORACLE) VARIABLE g_salario number EXECUTE :g_salario := obten_sal(1)
  • 21. FUNCION EN TRANSACT SQL(SQL) CREATE FUNCTION fn_ObtenSalario ( @Numempl int ) RETURNS DECIMAL(10,2) AS BEGIN DECLARE @mSalario DECIMAL(10,2) SELECT @mSalario = salario FROM emp WHERE empno= @Numempl RETURN @mSalario END
  • 22. EJECUCION DE FUNCION EN TRANSACT(SQL) DECLARE @Numempl int, @Resultado DECIMAL(10,2) SET @Numempl= 2 SET @Resultado =hr.dbo.fn_ObtenSalario(@Numempl) PRINT @Resultado
  • 23. Cursores en Transact SQL Un cursor es una variable que nos permite recorrer con un conjunto de resultados obtenido a través de una sentencia SELECT fila a fila. Cuando trabajemos con cursores debemos seguir los siguientes pasos. • Declarar el cursor, utilizando DECLARE • Abrir el cursor, utilizando OPEN • Leer los datos del cursor, utilizando FETCH ... INTO • Cerrar el cursor, utilizando CLOSE • Liberar el cursor, utilizando DEALLOCATE
  • 24. CURSOR TRANSACT SQL -- Declaracion de variables para el cursor DECLARE @empno numeric(3,0), @nombre varchar(40), @trabajo varchar(20), @depno numeric(3,0), @salario numeric(12,2) -- Declaración del cursor DECLARE cEMP CURSOR FOR SELECT empno, nombre, trabajo, depno, salario FROM EMP -- Apertura del cursor OPEN cEMP
  • 25. CURSOR TRANSACT SQL -- Lectura de la primera fila del cursor/ luego impresión en ciclo while FETCH cEMP INTO @empno, @nombre, @trabajo, @depno, @salario PRINT ' nemp nombre trabajo depno salario' -- Lectura de la siguiente fila del cursor WHILE (@@FETCH_STATUS = 0 ) BEGIN PRINT STR(@empno)+' '+@nombre + ' ' +replicate ('*',40-LEN(@nombre))+' '+ @trabajo +' '+replicate ('*',20-LEN(@trabajo))+STR(@depno)+' '+STR( @salario) -- Lectura de la siguiente fila del cursor FETCH cEMP INTO @empno, @nombre, @trabajo, @depno, @salario END -- Cierre del cursor CLOSE cEMP -- Liberar los recursos DEALLOCATE cEMP