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?

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
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql ServerCorfapo
 
Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Jair Ospino Ardila
 
Ejercicios de estructura secuencial
Ejercicios de estructura secuencialEjercicios de estructura secuencial
Ejercicios de estructura secuencialyulieth licona
 
Problemas propuestos clase 0-1
Problemas propuestos  clase 0-1Problemas propuestos  clase 0-1
Problemas propuestos clase 0-1Jefferson Prieto
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++cemayoral
 
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
 
Trabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje cTrabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje coswnes92
 
Problemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2bProblemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2bFRESH221 C.R
 
Actividad de aprendizaje nro 08 estructuras de control repetitivas while, d...
Actividad de aprendizaje nro 08   estructuras de control repetitivas while, d...Actividad de aprendizaje nro 08   estructuras de control repetitivas while, d...
Actividad de aprendizaje nro 08 estructuras de control repetitivas while, d...GabrielGonzaloDavila
 
Commit&rollback
Commit&rollbackCommit&rollback
Commit&rollbackArchCHUZ
 

Was ist angesagt? (20)

Los lenguajes
Los lenguajesLos lenguajes
Los lenguajes
 
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)
 
Fundamentos de SELECT SQL
Fundamentos de SELECT SQLFundamentos de SELECT SQL
Fundamentos de SELECT SQL
 
sub Consultas Oracle SQL
sub Consultas Oracle SQLsub Consultas Oracle SQL
sub Consultas Oracle SQL
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server
 
Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Triggers o disparadores en MySQL
Triggers o disparadores en MySQL
 
Ejercicios de estructura secuencial
Ejercicios de estructura secuencialEjercicios de estructura secuencial
Ejercicios de estructura secuencial
 
Divisores de un número (código Dev C++)
Divisores de un número (código Dev C++)Divisores de un número (código Dev C++)
Divisores de un número (código Dev C++)
 
Disparadores
DisparadoresDisparadores
Disparadores
 
ejercicios php rfo
ejercicios php rfoejercicios php rfo
ejercicios php rfo
 
Problemas propuestos clase 0-1
Problemas propuestos  clase 0-1Problemas propuestos  clase 0-1
Problemas propuestos clase 0-1
 
Funciones de Agregacion
Funciones de AgregacionFunciones de Agregacion
Funciones de Agregacion
 
Ejemplos Para Dev C++
Ejemplos Para Dev C++Ejemplos Para Dev C++
Ejemplos Para Dev C++
 
Ejemplos u4
Ejemplos u4Ejemplos u4
Ejemplos u4
 
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
 
Trabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje cTrabajo de ejercicios de lenguaje c
Trabajo de ejercicios de lenguaje c
 
Problemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2bProblemas+resueltos+de+c$2 b$2b
Problemas+resueltos+de+c$2 b$2b
 
Actividad de aprendizaje nro 08 estructuras de control repetitivas while, d...
Actividad de aprendizaje nro 08   estructuras de control repetitivas while, d...Actividad de aprendizaje nro 08   estructuras de control repetitivas while, d...
Actividad de aprendizaje nro 08 estructuras de control repetitivas while, d...
 
Commit&rollback
Commit&rollbackCommit&rollback
Commit&rollback
 
01 curso poo Funciones
01 curso poo Funciones01 curso poo Funciones
01 curso poo Funciones
 

Andere mochten auch

Copias de seguridad y recuperación en Oracle
Copias de seguridad y recuperación en OracleCopias de seguridad y recuperación en Oracle
Copias de seguridad y recuperación en OracleCarmen Soler
 
Manual de microsoft sql server full transact sql
Manual de microsoft sql server   full transact sqlManual de microsoft sql server   full transact sql
Manual de microsoft sql server full transact sqlRene Aguerrero
 
Recuperación de la base de datos en Oracle
Recuperación de la base de datos en OracleRecuperación de la base de datos en Oracle
Recuperación de la base de datos en OracleCarmen Soler
 
Sesion07- Estructuras de control (Oracle)
Sesion07- Estructuras de control (Oracle)Sesion07- Estructuras de control (Oracle)
Sesion07- Estructuras de control (Oracle)José Toro
 
Introducción a SQL sobre Oracle
Introducción a SQL sobre OracleIntroducción a SQL sobre Oracle
Introducción a SQL sobre OracleRaúl Galíndez
 

Andere mochten auch (7)

Copias de seguridad y recuperación en Oracle
Copias de seguridad y recuperación en OracleCopias de seguridad y recuperación en Oracle
Copias de seguridad y recuperación en Oracle
 
51191625 triggers
51191625 triggers51191625 triggers
51191625 triggers
 
Manual de microsoft sql server full transact sql
Manual de microsoft sql server   full transact sqlManual de microsoft sql server   full transact sql
Manual de microsoft sql server full transact sql
 
Recuperación de la base de datos en Oracle
Recuperación de la base de datos en OracleRecuperación de la base de datos en Oracle
Recuperación de la base de datos en Oracle
 
Sesion07- Estructuras de control (Oracle)
Sesion07- Estructuras de control (Oracle)Sesion07- Estructuras de control (Oracle)
Sesion07- Estructuras de control (Oracle)
 
Backups en Oracle
Backups en OracleBackups en Oracle
Backups en Oracle
 
Introducción a SQL sobre Oracle
Introducción a SQL sobre OracleIntroducción a SQL sobre Oracle
Introducción a SQL sobre Oracle
 

Ähnlich wie Unidad vi esp parte 2 procesimientos en plsql y transact sql

Base datos mysql y visual basic
Base datos mysql y visual basicBase datos mysql y visual basic
Base datos mysql y visual basicRafael Tobar Jame
 
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
 
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
 
Ejercicio Práctico de Base de Datos
Ejercicio Práctico de Base de DatosEjercicio Práctico de Base de Datos
Ejercicio Práctico de Base de DatosPilar Pardo Hidalgo
 
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...Nicola Strappazzon C.
 

Ähnlich wie Unidad vi esp parte 2 procesimientos en plsql y transact sql (20)

Base datos mysql y visual basic
Base datos mysql y visual basicBase datos mysql y visual basic
Base datos mysql y visual basic
 
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
 
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
 
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
 
Ejercicio Práctico de Base de Datos
Ejercicio Práctico de Base de DatosEjercicio Práctico de Base de Datos
Ejercicio Práctico de Base de Datos
 
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
 

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
 
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 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
 
Presentacion610
Presentacion610Presentacion610
Presentacion610
 

Unidad vi esp parte 2 procesimientos en plsql y transact 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