Universidad Nacional José María Arguedas Carrera Profesional de Ingeniería de sistemas
Docente: Ing. Edwin Ramos Velásquez Materia: Bases de Datos II
PRACTICA 02 UTILIZACIÓN DE PROCEDIMIENTOS ALMACENADOS EN SQL SERVER OBJETIVOS El alumno podrá utilizar procedimientos almacenados para realizar: • •
Consultas en SQL Consultas S QL S erv erver er Actualizaciones de datos
METODOLOGÍA •
•
•
•
El alumno registrará un usuario administrador de la base de datos recientemente creada (Por ejemplo UsuarioBD). Asignándole los respectivos derechos. El alumno ingresará al administrador Analizador de Consultas de SQL Server identificándose previamente (por ejemplo como UsuarioBD, con su password respectivo). El alumno creará procedimientos almacenados en SQL Server 2000 según el mismo formato que sintaxis que especifica SQL Server. El alumno ejecutará las consultas SQL Server desde el mismo Analizador de consultas SQL (abierto desde el Administrador Corporativo de SQL Server).
CONOCIMIENTOS PREVIOS El lector tiene conocimientos previos acerca de la sintaxis de creación de procedimientos almacenados
CONSIDERACIONES PREVIAS En esta práctica asumimos las siguientes consideraciones -
Existe una PC servidor cuyo nombre es: ServidorPC Existe un servidor de Base de datos SQL Server 2000 cuyo nombre es: ServidorBD (que está alojado en el ServidorPC) y que localmente ha sido adecuadamente registrado. En este servidor se ha creado la base de datos denominada DataBaseTienda Para la base de datos DataBaseTienda se ha creado un usuario tipo administrador (con derechos de acceso típico de un adm administrador inistrador de BD) llamado UsuarioBD con un password de acceso 1 PasswordUsuario . Crear un directorio denominado DirectorioTrabajo (Allí guardará todos los archivos generados en esta práctica) Nota: Los datos para usarse en la conexión a la base de datos serán:
ATRIBUTO DATAB ASE DATABAS E NAME SERVE SE RVE R NAME
DataBaseTienda DataBaseTien da Servid Serv idor orBD BD
HOST HOS T NAME
Servido Serv idorPC rPC
USER US ER NAME
Usuari Usua rioBD oBD
PASSWORD
1
VALORES DE MUESTRA
VALORES PERSONALIZADOS 2
PasswordUsuario4
El nombre del usuario y su password se registrará recién en esta práctica. Usted debe llenar esta columna con los valores que le corresponden a usted. 3 Este usuario usted debe registrarlo en la presente práctica 4 Esta clave corresponde al usuario recién registrado 2
Universidad Nacional José María Arguedas Carrera Profesional de Ingeniería de sistemas
Docente: Ing. Edwin Ramos Velásquez Materia: Bases de Datos II
SECCION 01: CREACIÓN DEL PROCEDIMIENTO ALMACENADO usp_BuscarEmpleadoPorCod (codEmp: Integer) 1. Presionar el botón Nueva Consulta, y en la ventana de edición, escribir lo siguiente: CREATE PROCEDURE dbo. usp_ Buscar Empl eadoPor Cod_ASQL @CodEmp I NT / * Par ámet r os de ent r ada */ AS I F EXI STS( SELECT cod_ empl eado FROM empl eado WHERE cod_ empl eado=@CodEmp) BEGI N SELECT Apel l i dos, Nombr es, Cargo, Fecha_cont r at aci on, Años_ser vi ci o = YEAR( GETDATE( ) ) - YEAR( Fecha_cont r at aci on) FROM empl eado WHERE cod_ empl eado = @CodEmp END ELSE BEGI N PRI NT ' No exi st e el codi go de empl eado que buscas. . . : ' + CAST( @CodEmp as var char ( 6 ) ) RETURN - 1 / *Devol ver codi go de est ado */ END RETURN 0 2. Guardar el archivo como Busc ar Empl eadoPor Cod_ASQL. sql 3. Ejecutar la consulta (presionar el botón Ejecutar consulta ) Se habrá creado con éxito el procedimiento almacenado usp_ Buscar Empl eadoPor Cod_ASQL
4. Presionar el botón Nueva Consulta, y en la ventana de edición, escribir lo siguiente: CREATE PROCEDURE dbo. usp_Busc ar Empl eadoPor Cod @CodEmp I NT / * Par ámet r os de ent r ada */ AS SELECT Apel l i dos, Nombr es, Car go, Fecha_cont r at aci on, Años_ser vi ci o = YEAR( GETDATE( ) ) - YEAR( Fecha_cont r at aci on) FROM empl eado WHERE cod_ empl eado = @CodEmp RETURN 0 5. Guardar el archivo como Busc ar Empl eadoPor Cod. sql 6. Presionar el botón Analizar consulta. Corrija los errores si lo hubieran. 7. Ejecutar la consulta (presionar el botón Ejecutar consulta ) Se habrá creado con éxito el procedimiento almacenado usp_ Buscar Empl eadoPor Cod a) Ejecución del procedimiento almacenado usp_ Busc ar Empl eadoPor Cod_ASQL
8. Abra una nueva ventana para ejecutar el procedimiento con instrucciones por ejemplo: Probamos cómo funciona el procedimiento remoto: * Buscaremos el empleado que tiene por código el nro. 8 Exec usp_ Buscar Empl eadoPor Cod_ASQL 8 El resultado de este procedimiento almacenado es similar a: Apel l i dos Nombr es Car go Fecha_cont r ataci on Años_ser vi ci o --------- ------- ------------- ------------- -- ----------- ------ -----------Cal l ahan Laur a Coor di nador I nt er no de Vent as 1993- 01- 30 00: 00: 00 12 * Buscaremos el empleado que tiene por código el nro. 6 Exec usp_ Buscar Empl eadoPor Cod_ASQL 6 El resultado de este procedimiento almacenado es similar a: Apel l i dos Nombr es Car go Fecha_cont r ataci on Años_servi ci o --------- ------------------ -------- ------------- -----------------Suyama Mi chael Repr esent ant e de Vent as 1992- 09- 13 00: 00: 00. 000 13
Universidad Nacional José María Arguedas Carrera Profesional de Ingeniería de sistemas
Docente: Ing. Edwin Ramos Velásquez Materia: Bases de Datos II
b) Ejecución del procedimiento almacenado usp_ Busc ar Empl eadoPor Cod
9. Ejecutar la consulta Buscar Empl eadoPor Cod. sql y compare los resultados con la anterior consulta. ¿Cuál es la diferencia en los resultados de ambos procedimientos almacenados? ¿Por qué utilizaríamos la instrucción PRINT en un procedimiento almacenado mientras que en otro no es utilizado?
SECCION 02: CREACIÓN DEL PROCEDIMIENTO ALMACENADO usp_ usp_BuscarEmpleadoPorApeNom (Filtro: String[70]) 10. Presionar el botón Nueva Consulta, y en la ventana de edición, escribir lo siguiente: CREATE PROCEDURE dbo. usp_ Buscar Empl eadoPor ApeNom @Fi l t r o VARCHAR( 70) AS SELECT codi go = cod_empl eado, ApeNom = Apel l i dos + ' , ' + Nombr es, Tf no_par t i cul ar , Fecha_Naci mi ent o FROM empl eado WHERE apel l i dos LI KE ' %' + @Fi l t r o + ' %' OR nombr es LI KE ' %' + @Fi l t r o + ' %' RETURN 0 11. P resionar el botón Analizar consulta. Corrija los errores, si los hubiera. 12. Guardar el archivo como Buscar Empl eadoPor ApeNom. sql 13. Ejecutar la consulta (presionar el botón Ejecutar consulta ) Se habrá creado con éxito el procedimiento almacenado usp_ Buscar Empl eadoPor ApeNom 14. Abra una nueva ventana para ejecutar el procedimiento con instrucciones por ejemplo: Probamos cómo funciona el procedimiento remoto: * Buscaremos los empleados cuyo nombre o apellido empieza con las letras “pe” EXEC usp_ Buscar Empl eadoPor ApeNom pe El resultado de este procedimiento almacenado es similar a:
Codi go ApeNom t f no_Par t i cul ar Fecha_Naci mi ent o ------------------ --------------- -------------- -----------4 Peacock, Mar gar et 2065558122 1937- 09- 19 00: 00: 00. 000 15 Per ei r a, Laur ent 88010168 1965- 12- 09 00: 00: 00. 000 * Buscaremos los empleados cuyo nombre o apellido empieza con las letras “LA” EXEC usp_Buscar Empl eadoPor ApeNom LA El resultado de este procedimiento almacenado es similar a:
Codi go ApeNom t f no_Par t i cul ar Fecha_Naci mi ent o ------------------ --------------- -------------- -----------8 Cal l ahan, Laur a 2065551189 1958- 01- 09 00: 00: 00. 000 15 Per ei r a, Laur ent 88010168 1965- 12- 09 00: 00: 00. 000
SECCION 03: CREACIÓN DEL PROCEDIMIENTO ALMACENADO usp_EstadPedXProducto (Anio: String[4]) 15. Presionar el botón Nueva Consulta, y en la ventana de edición, escribir lo siguiente: CREATE PROCEDURE dbo. usp_Est adPedXPr oduct o @Ani o CHAR( 4) AS SELECT TOP 10 d. cod_product o, Tot al =SUM( Cant i dad) , a. Nombr e_pr oduct o FROM det al l e_pedi do d p ON d. i d_pedi do = p. i d_pedi do I NNER J OI N pedi do I NNER J OI N pr oduct o a ON d. cod_pr oduct o = a. cod_pr oduct o WHERE YEAR( f echa_pedi do) = CAST( @Ani o AS I NTEGER ) GROUP BY d. cod_pr oduct o, a. nombr e_pr oduct o ORDER BY 2 DESC RETURN 0
Universidad Nacional José María Arguedas Carrera Profesional de Ingeniería de sistemas
Docente: Ing. Edwin Ramos Velásquez Materia: Bases de Datos II
16. P resionar el botón Analizar consulta. Corrija los errores, si los hubiera. 17. Guardar el archivo como Est adPedXPr oduct o. s ql 18. Ejecutar la consulta (presionar el botón Ejecutar consulta ) Con esto se habrá creado con éxito el procedimiento almacenado usp_ Est adPedXPr oduct o 19. Abra una nueva ventana para ejecutar el procedimiento con instrucciones por ejemplo: Probamos cómo funciona el procedimiento remoto: * Buscaremos los 10 primeros artículos vendidos según sus cantidades totales el año 2002 EXEC usp_Est adPedXPr oduct o 2002 El resultado de este procedimiento almacenado es similar a: Cod_ Pr oduct o Tot al Nombr e_Pr oduct o ---------------- ------------ ------------ ----3305 15 Guar di an Mi ni Lock 4105 14 I nFl ux Lycr a Gl ove 301151 14 Sl i ckRock 2202 13 Tr i umph Pr o Hel met 401002 13 Mi ni Ni cr os 1101 12 Act i ve Oudoor s Cr ochet Gl ove 1111 11 Act i ve Oudoor s Lycr a Gl ove 303182 11 Ni cr os 2204 10 Tr i umph Pr o Hel met 2209 10 Tr i umph Ver t i go Hel met
SECCION 04: CREACIÓN DEL PROCEDIMIENTO ALMACENADO usp_EstadMejorClientePorProducto (Anio: String[4]) 20. P resionar el botón Nueva Consulta, y en la ventana de edición, escribir lo siguiente: CREATE PROCEDURE dbo. usp_Est adMej or Cl i ent ePor Pr oduct o @Ani o I NT = 0 As SET NOCOUNT ON - - Sel ecci onar l os cl i ent es del mes segun Cant i dad de Pr oduct o Pedi do SELECT d. cod_product o, p. cod_cl i ent e, Tot al = SUM( d. cant i dad) , c. Nombr e_cl i ent e I NTO #Tot al Cant Pedi do FROM Det al l e_pedi do d ON d. i d_pedi do = p. i d_pedi do I NNER J OI N Pedi do p I NNER J OI N Cl i ent e c ON p. cod_cl i ent e = c. cod_Cl i ent e WHERE YEAR( p. f echa_pedi do) = @Ani o GROUP BY p. cod_cl i ent e, d. cod_pr oduct o, c. Nombr e_cl i ent e ORDER BY p. cod_cl i ent e, d. cod_pr oduct o, 3 DESC - - Sel ecci onar sol o l os pr oduct os del Año SELECT d. cod_ pr oduct o I NTO #Pr oduct os FROM Det al l e_pedi do d I NNER J OI N Pedi do p ON d. i d_pedi do = p. i d_pedi do WHERE YEAR( p. f echa_pedi do) = @Ani o GROUP BY d. cod_pr oduct o ORDER BY d. cod_pr oduct o CREATE TABLE #LosMej or es ( Cod_pr oduct o I NT NULL , Cod_cl i ent e I NT NULL , Tot al _ pedi do DECI MAL( 5, 2) NULL , Nom_cl i ent e CHAR( 50) NULL ) -DECLARE @CodPr od I NT
Universidad Nacional José María Arguedas Carrera Profesional de Ingeniería de sistemas
Docente: Ing. Edwin Ramos Velásquez Materia: Bases de Datos II
- - - - Manej o de un cur sor DECLARE Cur sor _Pr od CURSOR SCROLL FOR SELECT Cod_pr oduct o FROM #Pr oduct os OPEN Cur sor _Pr od FETCH FI RST FROM Cur sor _Pr od I NTO @CodPr od WHI LE @@FETCH_STATUS = 0 BEGI N I NSERT #LosMej or es ( Cod_pr oduct o, Cod_cl i ent e, Tot al _pedi do, Nom_cl i ent e) ( SELECT Top 3 Cod_product o, Cod_cl i ent e, Tot al , Nombr e_cl i ent e FROM #Tot al Cant Pedi do WHERE Cod_pr oduct o = @CodPr od ) FETCH NEXT Fr om Cur sor _Pr od I NTO @CodPr od END CLOSE Cur sor _Pr od DEALLOCATE Cur sor _Pr od -SET NOCOUNT OFF SELECT * FROM #Los Mej or es ORDER BY Cod_pr oduct o, Tot al _pedi do DESC RETURN 0
21. P resionar el botón Analizar consulta. Corrija los errores, si los hubiera. 22. Guardar el archivo como usp_ Est adMej or Cl i ent ePor Pr oduct o. sql 23. Ejecutar la consulta (presionar el botón Ejecutar consulta ) Con esto se habrá creado con éxito usp_Est adMej orCl i ent ePorPr oduct o
el
procedimiento
almacenado
24. Abra una nueva ventana para ejecutar el procedimiento con instrucciones por ejemplo: Probamos cómo funciona el procedimiento remoto: * Buscaremos los 10 primeros artículos vendidos según sus cantidades totales el año 2002 EXEC usp_Est adMej or Cl i ent ePor Pr oduct o 2002
El resultado de este procedimiento almacenado es similar a:
1 2 3 4 239 240 241
Cod_Pr oduct o ----------1101 1101 1101 1102 …. . …. . 402002 402002 402002
Cod_Cl i ent e - - - - - - - - - - - -30 25 1 29 18 33 15
Tot al _Pedi do - - - - - - - - - - -3. 00 2. 00 1. 00 2. 00 3. 00 3. 00 1. 00
Nom_Cl i ent e - - - - - - - - - - -- - - - - Spokes f or Fol ks Ext r eme Cycl i ng Ci t y Cycl i st s Bl azi ng Bi kes Bi kes and Tr i kes Ful cr um Cycl es The Bi ke Cel l ar
Universidad Nacional José María Arguedas Carrera Profesional de Ingeniería de sistemas
Docente: Ing. Edwin Ramos Velásquez Materia: Bases de Datos II
SECCION 05: CREACIÓN DEL PROCEDIMIENTO ALMACENADO usp_LeerProducto 25. Presionar el botón Nueva Consulta, y en la ventana de edición, escribir lo siguiente: CREATE PROCEDURE dbo. usp_Leer Pr oduct o AS SET NOCOUNT ON DECLARE Product o_cur sor CURSOR FOR SELECT * FROM pr oduct o
OPEN Product o_cur sor / *Abr e el cur sor */ FETCH Pr oduct o_cur sor / *mueve el cur sor al si gui ent e r egi st r o*/ WHI LE @@FETCH_STATUS = 0 BEGI N FETCH Pr oduct o_cur sor END
/ *mueve el cur sor al si gui ent e r egi st r o*/
- - - Ci er r a el cur sor CLOSE Pr oducto_cur sor DEALLOCATE Pr oduct o_cur sor - - - Li ber a l os r ecur sos usados en el cur sor
26. P resionar el botón Analizar consulta. Corrija los errores, si los hubiera. 27. Guardar el archivo como LeerProducto . sql 28. Ejecutar la consulta (presionar el botón Ejecutar consulta ) 29. Probarlo ejecutando la instrucción:
EXEC usp_Leer Pr oduct o
SECCION 06: CREACIÓN DE LA VISTA Lista_Personas 30. Presionar el botón Nueva Consulta, y en la ventana de edición, escribir lo siguiente: CREATE VI EW dbo. vw_Li st a_Per sonas AS SELECT cod_Per sona = ' P' + CAST( Cod_ Pr oveedor AS VARCHAR( 5 ) ) , Nombr e, Di r ecci ón = Di r ecci on_1, t i po = ' Pr oveedor ' FROM Pr oveedor UNI ON ALL SELECT cod_Per sona = ' C' + CAST ( Cod_ Cl i ent e AS VARCHAR( 5 ) ) , Nombr e = Nombr e_Cl i ent e, Di r ecci on=Di r ecci on_1, t i po=' Cl i ent e' FROM Cl i ent e UNI ON ALL SELECT cod_Per sona = ' E' + CAST( Cod_Empl eado AS VARCHAR( 5 ) ) , Nombr e = Apel l i dos + ' , ' + Nombr es, Di r ecci on, t i po=' Empl eado' FROM Empl eado
31. P resionar el botón Analizar consulta. Corrija los errores, si los hubiera. 32. Guardar el archivo como VistaLista_Personas . sql 33. Ejecutar la consulta (presionar el botón Ejecutar consulta ) 34. Probarlo ejecutando: SELECT * FROM vw_Li st a_Per sonas
NOTA: Note que una vista es tratada de la misma forma que una tabla al momento de seleccionar sus datos para mostrarlo.
Universidad Nacional José María Arguedas Carrera Profesional de Ingeniería de sistemas
Docente: Ing. Edwin Ramos Velásquez Materia: Bases de Datos II
SECCION 07: CREACIÓN DE LA VISTA vw_10Mejores_Clientes 35. Presionar el botón Nueva Consulta, y en la ventana de edición, escribir lo siguiente: CREATE VI EW dbo. vw_10Mej or es_Cl i ent es AS SELECT TOP 10 C. Cod_ Cl i ent e, Nombr e = C. Nombr e_Cl i ent e, Mont oCompr ado = SUM( P. Sub_Tot al ) FROM Cl i ent e C I NNER J OI N Compr obant e_Pago P ON C. cod_Cl i ent e = P. cod_Cl i ent e GROUP BY C. Cod_Cl i ent e, C. Nombr e_Cl i ent e ORDER BY Mont oCompr ado DESC, C. Cod_cl i ent e
36. P resionar el botón Analizar consulta. Corrija los errores, si los hubiera. 37. Guardar el archivo como vw_10Mejores_Clientes . sql 38. Ejecutar la consulta (presionar el botón Ejecutar consulta ) 39. Probarlo ejecutando: SELECT * FROM vw_ 10Mej or es_ Cl i ent es El resultado de esta consulta es similar al que se muestra Cod_Cl i ent e Nombr e Mont oCompr ado -------------------------------- -49 Rocky Roadst er s 89764. 7800 26 Bl azi ng Saddl es 65017. 6300 38 Tyr ed Out 63961. 2900 22 Cr ank Component s 61962. 1600 39 Wheel s I nc. 60736. 1500 97 Bi cycl et t e Bour ges Nor d 60732. 6500 72 Cycl e Ci t y Rome 56420. 4400 74 Fahr kr af t Räder 56203. 3400 54 Cycl opat h 53274. 3600 64 SAB Mount ai n 52034. 5900
SECCION 08: MANIPULACIÓN DE CURSORES 2 . Utilización de cursores a) En el siguiente ejemplo mostraremos la capacidad de desplazamiento a través de las filas de los resultados generados por un cursor: Ejecute las siguientes instrucciones una por una y verifique el resultado de cada una: •
DECLARE cl i ent e_cur sor SCROLL CURSOR FOR SELECT cod_cl i ent e, nombr e_cl i ent e, pai s FROM cl i ent e OPEN cl i ent e_cur sor •
A continuación ejecute cada uno de las siguientes batchs y observe el resultado de cada uno - - pr i mer a f i l a del cur sor – Ej ecuci ón 1 FETCH NEXT FROM cl i ent e_cur sor SELECT " Est ado del cur sor " = @@FETCH_STATUS GO - - úl t i ma f i l a del c ur s or – Ej ec uc i ón 2 FETCH LAST FROM cl i ent e_cur sor SELECT " Est ado del cur sor " = @@FETCH_STATUS GO - - l a mi sma f i l a ant er i or – Ej ecuci ón 3 FETCH RELATI VE 0 FROM cl i ent e_cur sor SELECT " Est ado del cur sor " = @@FETCH_STATUS
Universidad Nacional José María Arguedas Carrera Profesional de Ingeniería de sistemas
Docente: Ing. Edwin Ramos Velásquez Materia: Bases de Datos II
GO - - pr i mer a f i l a del cur sor – Ej ecuci ón 4 FETCH FI RST FROM cl i ent e_cur sor SELECT " Est ado del cur sor " = @@FETCH_ STATUS GO - - s i gui ent e f i l a ( s egunda f i l a) – Ej ec uc i ón 5 FETCH NEXT FROM cl i ent e_cur sor SELECT " Est ado del cur sor " = @@FETCH_STATUS GO - - La sext a f i l a del cur sor – Ej ecuci ón 6 FETCH ABSOLUTE 6 FROM cl i ent e_cur sor SELECT " Est ado del cur sor " = @@FETCH_STATUS GO - - Bor r a de l a t abl a l a sext a f i l a del cur sor – Ej ecuci ón 7 DELETE FROM cl i ent e WHERE CURRENT OF cl i ent e_cur sor GO - - no exi st en dat os par a l a sext a f i l a – Ej ecuci ón 8 FETCH RELATI VE 0 FROM cl i ent e_cur sor SELECT " Est ado del cur sor " = @@FETCH_STATUS GO - - Leer l a f i l a ant er i or – Ej ecuc i ón 9 FETCH PRI OR FROM cl i ent e_cur sor SELECT " Est ado del cur sor " = @@FETCH_STATUS GO - - l a f i l a no exi st e en el cur sor – Ej ecuci ón 10 - - ( Oj o: No hay 7200 f i l as en l a t abl a cl i ent es) FETCH ABSOLUTE 7200 FROM cl i ent e_cur sor SELECT " Est ado del cur sor " = @@FETCH_STATUS GO - - cer r ar y el i mi nar el cur sor el cur sor – Ej ecuci ón 11 CLOSE cl i ent e_cur sor DEALLOCATE cl i ent e_cur sor GO b) Creación y utilización de un cursor desde un Stored Procedure Revise la implementación de la rutina de creación del procedimiento usp_Leer Pr oduct o Ejecute el procedimiento con la instrucción: EXEC usp_Leer Pr oduct o
TAREAS Escriba un procedimiento almacenado: 1. Que devuelva el número total de cantidades vendidas Formato: Cod_Producto – Nombre_Producto – CantidadVendida – Nombre_Tipo_producto 2. Que devuelva una lista de los 30 primeros registros de Comprobantes de pago registrados el año XXXX (ejemplo 2004) Formato:
Nro_Comprobante – Total – fecha_emision
3. Que muestre todos los nombres de los clientes que realizaron algún tipo de pedido Formato:
Nombre_Cliente – Nro_Pedido – fecha_emision – Total
4. Que muestre todos los nombres de los clientes que realizaron algún tipo de compra Formato:
Nombre_Cliente – Nro_Comprobante – fecha_emision – Total
5. Que muestre todos los nombres de los empleados que registraron algún tipo de pedido Formato:
NombresyApellido – Nro_Comprobante – fecha_emision – Total
6. Que muestre todos los nombres de los empleados que registraron algún tipo de compra Formato: NombresyApellido – Nro_Comprobante – fecha_emision – Total 7. Que muestre un listado de todos los pedidos no entregados
Universidad Nacional José María Arguedas Carrera Profesional de Ingeniería de sistemas
Docente: Ing. Edwin Ramos Velásquez Materia: Bases de Datos II
PREGUNTAS PARA SU ANÁLISIS (Repaso)
¿Cómo ejecutaría los siguientes procedimientos almacenados5 ? CREATE PROCEDURE usp_Mej or esCl i ent es @maxCl i ent es I NT Rpt a: EXEC usp_Mej oresCl i ent es 10 •
•
•
•
CREATE PROCEDURE usp_BuscaCl i ent e @codCl i ent e I NT Rpt a: ¿? CREATE PROCEDURE usp_ BuscaNombr eCl i ent e @i Nombr e VARCHAR( 25) Rpt a: EXEC usp_BuscaNombr eCl i ent e ' J uan' CREATE PROCEDURE usp_BuscaEmpl eado @i Apel l i do VARCHAR( 25) Rpt a: ¿ ?
¿En que se diferenciaría el siguiente procedimiento almacenado con dbo. usp_Busc ar Empl eadoPor Cod y dbo. usp_ Buscar Empl eadoPor Cod_ASQL CREATE PROCEDURE dbo. usp_Busc ar Empl eadoPor Cod_Opt i onal @CodEmp I NT AS DECLARE @Cur r ent App var char ( 35) SET @Cur r ent App = APP _ NAME( )
el
procedimiento?
I F ( @Cur r ent App = ' MS SQL Quer y Anal yzer ' ) OR ( @Cur r ent App = ' Anal i zador de consul t as SQL' ) BEGI N I F Exi s t s ( SELECT cod_ empl eado FROM empl eado WHERE cod_ empl eado=@CodEmp) SELECT Apel l i dos, Nombr es, Car go, Fecha_cont r at aci on, Años_ser vi ci o = Year ( Get dat e( ) ) - Year ( Fecha_cont r at aci on) FROM empl eado WHERE cod_empl eado = @CodEmp ELSE Begi n PRI NT ' No exi st e el codi go de empl eado que buscas. . . : ' + Cast ( @CodEmp as var char ( 6 ) ) / *Devol ver codi go de est ado */ RETURN - 1 End END ELSE SELECT Apel l i dos, Nombr es, Car go, Fecha_cont r at aci on, Años_ser vi ci o = Year ( Get dat e( ) ) - Year ( Fecha_cont r at aci on) FROM empl eado WHERE cod_empl eado = @CodEmp Ret ur n 0
SECCION 09 (Más preguntas): Ejecución de consultas SQL en la base de datos DataBaseTienda a) Responda a las siguientes preguntas ¿Cuáles son los productos de tamaño “extragrand” Los nombres de los clientes que compraron productos de tamaño “extragrand” ¿Cuáles son los clientes que viven en la región “CA”? ¿Cuáles son los empleados que atendieron a clientes que viven en la región “CA”? ¿Cuáles son los empleados cuyos apellidos empiezan con la letra “D”? ¿Qué productos se vendieron en el año 2002? ¿Qué productos se vendieron a clientes que viven en la región “CA”? b) Plantéese cinco preguntas y encuentre las respuestas usando DML de Transact - SQL
5
Ninguno de los procedimientos almacenados ha sido creado en esta práctica. Sin embargo, al responder estas preguntas, asuma que sí fueron creados.
Universidad Nacional José María Arguedas Carrera Profesional de Ingeniería de sistemas
Docente: Ing. Edwin Ramos Velásquez Materia: Bases de Datos II
Ejemplos de consultas DML en una base de datos – ejemplo Sea la siguiente base de datos relacional,
Se cumple que se pueden realizar las siguientes consultas SQL – DML: --------------------------------------------------------------------------------------------- - Ej empl o 1: Sel ecci ón de datos de una sol a t abl a SELECT Cod_Empl eado, Apel l i dos, Nombr es - - 1. Sel ecci on de l os campos a vi sual i zar se FROM Empl eado - - 2. Sel ecci on de l a pr i mera t abl a --------------------------------------------------------------------------------------------- - Ej empl o 2: Sel ecci ón de dat os de dos t abl as SELECT E. Cod_Empl eado, E. Apel l i dos, E. Nombr es, P. Mont o_Pedi do - - 1. Sel ecc de campos a ver - - 2. Sel ecci on de l a pri mera t abl a FROM Empl eado AS E J OI N Pedi do AS P ON ( E. cod_Empl eado = P. cod_empl eado) - - 3. Si gui ent e Tabl a --------------------------------------------------------------------------------------------- - Ej empl o 3: Sel ecci ón de dat os de tr es o más t abl as SELECT E. Cod_Empl eado, E. Apel l i dos, E. Nombr es, P. I D_Pedi do, D. Cod_Product o - - 1. Sel ecci on de l os campos a vi sual i zarse FROM Empl eado AS E - - 2. Sel ecci on de l a pri mera t abl a Pedi do AS P ( E. cod_Em pl eado = P. cod_empl eado) - - 3. Si gui ent e Tabl a J OI N ON = D. I D_pedi do) J OI N Det al l e_Pedi do AS D ON ( P. I D_Pedi do --------------------------------------------------------------------------------------------- - Ej empl o 4: Sel ecci on de dos t abl as que est an r el aci onadas -por t r es o N campos SELECT C. Ti po_Comprobant e, C. Nr o_Ser i e, C. Nr o_Comprobant e, C. Fecha_Emi si on, D. Cod_Pr oduct o FROM Compr obant e_ Pago AS C I NNER J OI N Det al l e_Compr obant e_Pago AS D ON( C. Ti po_Comprobant e = D. Ti po_Comprobant e AND C. Nr o_Seri e = D. Nr o_Seri e AND C. Nr o_Compr obant e = D. Nr o_Compr obant e) --------------------------------------------------------------------------------------------- - Ej empl o 5: Uso de SubConsul t as para sel ecci on SELECT P. Cod_Pr oduct o, P. Nombre_ Pr oduct o FROM Product o AS P WHERE Exi st s ( SELECT C. Ti po_Comprobant e, C. Nr o_Ser i e, C. Nr o_Comprobant e, C. Fecha_Emi si on, D. Cod_Pr oduct o FROM Compr obant e_ Pago AS C Det al l e_Compr obant e_Pago D I NNER J OI N AS ON( C. Ti po_Compr obant e=D. Ti po_Compr obant e C. Nr o_Seri e=D. Nr o_Seri e AND C. Nr o_Compr obant e = D. Nr o_Compr obant e) WHERE YEAR( C. Fecha_Emi si on) =2002 AND P. Cod_Pr oduct o=D. Cod_Pr oduct o )
AND