Programacion en SQL
Programacion en SQL
Elaborado por:
Oralia Cortés Grajales
PREÁMBULO
Así como en los lenguajes de propósito general utiliza sentencias para manejo de
información, el SQL también utiliza dichas sentencias para manejo de información dentro
de una base de datos.
1. Sentencias
2. Desencadenantes, disparadores o trigger
3. Vistas
4. Procedimientos almacenados
5. Funciones
6. Seguridad
7. Documentación
2
PROGRAMACIÓN EN SQL
1. SENTENCIAS
➢ Variables
➢ Go
/*******Un script está compuesto por uno o varios lotes. Un lote delimita el alcance de las
variables y sentencias del script. Dentro de un mismo script se diferencian los diferentes lotes
a través de la instrucción GO.*/
3
SELECT @nombre=nom_emp,
@telefono=telefono,
@sala=salario
FROM empleado
WHERE cedula = 100
PRINT @nombre
PRINT @telefono
PRINT @sala
➢ Condicionales
IF @diminutivo = 'no'
BEGIN
PRINT 'Buen Día'
END
ELSE
BEGIN
PRINT 'mal día'
END
➢ Try y catch
BEGIN TRY
DECLARE @divisor int ,
@dividendo int,
@resultado int
SET @divisor = 1
-- Esta línea provoca un error de división por 0
4
➢ Estructura condicional CASE
➢ El bucle WHILE
5
/* Podemos pasar a la siguiente iteración del bucle utilizando CONTINUE.*/
DECLARE @contador int
SET @contador = 0
WHILE (@contador < 100)
BEGIN
SET @contador = @contador + 1
IF (@contador % 2 = 0)
CONTINUE
PRINT 'Iteracion del bucle ' + cast(@contador AS varchar)
END
➢ Trigger DML
Los eventos DML son instrucciones INSERT, UPDATE o DELETE de una tabla o vista.
6
Sintaxis
/*Crear un trigger para que cada vez que se realice un pago se decremente la deuda
del estudiante.*/
7
➢ Trigger DDL
/*Ejemplo trigger DDL que no permite modificar ni crear tablas en la base de datos
brigadas*/
create trigger TR_Brigadas_medicamentos
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
BEGIN
RAISERROR ('No está permitido borrar ni modificar tablas !' , 16, 1)
ROLLBACK TRANSACTION
END
3. VISTAS1
Una vista es una tabla virtual cuyo contenido está definido por una consulta. Al igual que
una tabla real, una vista consta de un conjunto de columnas y filas de datos con un nombre.
Sin embargo, a menos que esté indexada, una vista no existe como conjunto de valores de
datos almacenados en una base de datos. Las filas y las columnas de datos proceden de
tablas a las que se hace referencia en la consulta que define la vista y se producen de forma
dinámica cuando se hace referencia a la vista.
Una vista actúa como filtro de las tablas subyacentes a las que se hace referencia en ella.
No existe ninguna restricción a la hora de consultar vistas.
Sintaxis:
CREATE VIEW <nombre_vista>
AS
(<sentencia_select>);
Operaciones:
● Create view
● Alter view
● Drop view
1
Tomado de Vistas en SQL Server 2008 (Agosto 12 de 2015). Recuperado de
http://documents.mx/documents/vistas-en-sql-server-2008pdf.html#
8
Ejemplo
/*Crear una vista lineal que muestre los datos de los empleados y un aumento del
10% sobre su bonificacion y su salario si este esta entre 600000 y 2000000 y han
participado en mas de 2 brigadas*/
9
● Unión de dos o más tablas: Se puede crear una vista usando una operación de unión.
Las operaciones de unión complejas se pueden simplificar cuando se usa una vista.
● Información de agregación: Se puede crear una vista que contenga datos de
agregación. Este tipo de vista también se usa para simplificar operaciones complejas.
Las vistas también pueden ser usadas para consolidar datos divididos. Se pueden dividir
los datos de una tabla muy larga en varias tablas de menor tamaño para una mejor
administración y, posteriormente, se pueden usar las vistas para unir estas tablas en una
gran tabla virtual que facilite el acceso a la misma.
Restricciones de las vistas:
SQL Server asigna una serie de restricciones en la creación y el uso de las vistas. Estas
restricciones incluyen las siguientes:
Limitación de columnas: Una vista puede hacer referencia hasta a 1024 columnas de una
tabla. Si se necesita hacer referencia a un número mayor de columnas, se tendrán que usar
otros métodos.
Limitación de la base de datos: Solamente se puede crear una vista de una tabla en la
base de datos a la que el creador de la vista está accediendo.
Limitación de seguridad: El creador de la vista debe tener acceso a todas las columnas a
las que se haga referencia en la vista.
Reglas de integridad de los datos: Cualquier actualización, modificación, entre otras, que
se haga en la vista, no puede romper las reglas de integridad de los datos. Por ejemplo, si
la tabla subyacente de la vista no admite los valores nulos, la vista tampoco los admitirá.
Limitación de niveles en las vistas anidadas: Las vistas se pueden crear sobre otras
vistas (en otras palabras, se puede crear una vista que acceda a otras vistas). Las vistas
se pueden anidar hasta 32 niveles.
Limitación de la orden SELECT: La orden SELECT de una vista no puede contener una
cláusula ORDER BY ni la palabra clave INTO.
Limitación de agrupación: No puede tener agrupaciones
4. PROCEDIMIENTOS ALMACENADOS2
2
Recuperado de: SQL Procedimientos almacenados paso a paso. (Octubre 31 de 2008).
Recuperado de https://mspnor.wordpress.com/author/norber/page/18/
10
y se pueden guardar en el servidor con un nombre, para posteriormente se invocados y
ejecutados.
Ventajas de usar SP
Sintaxis
Create procedure nom_procedimiento
@A varchar(50),
@B varchar(50),
as
Select
From
Where
11
as
Select
medicamento.cod_med,medicamento.nom_med,medicamento.forma_uso,medicamento.c
antidad,medicamento.valor, COUNT(*) as BRIGADAS
from medicamento inner join bri_med
on medicamento.cod_med = bri_med.cod_med
Where medicamento.nom_med= @A or medicamento.nom_med=@B
group by
bri_med.cod_med,medicamento.cod_med,medicamento.nom_med,medicamento.forma_u
so,medicamento.cantidad,medicamento.valor
having COUNT(*)>@XBrigada
5. FUNCIONES
➢ Funciones lineales
Las funciones lineales son las funciones que devuelven un conjunto de resultados
correspondientes a la ejecución de una sentencia SELECT.
12
group by
participa.cedula,empleado.cedula,empleado.nom_emp,empleado.telefono,empleado.salari
o,empleado.bonificacion
Having count(*) >@can)
➢ Funciones escalares
Son muy similares a procedimientos almacenados con parámetros de salida, pero estas
pueden ser utilizadas en consultas de selección y en la cláusula where de las mismas.
Como todos los lenguajes de programación el SQL ya tiene incorporadas muchas funciones
para el manejo de los datos.
6. SEGURIDAD
Ejemplo
13
5. Buscamos nuestra Base de Datos “Demo”. Folder Security. Folder Users. Nuevo
User.en la base de datos
6. Aquí vamos a definir el nombre del User, que puede ser o no el mismo del Login.
Escribimos Maria y buscamos el Login equivalente. Click en OK
7. Iniciemos sesión de Windows con el Login Maria.
8. Verifiquemos que no tenemos acceso a otras bases más que a “Demo”, adicional no
podemos visualizar ninguna Tabla, solo vistas, pero al ejecutarla nos regresaran 0
Registros.
9. Regresemos a la sesión de Administrador y asignemos Roles al User Maria. Vamos a
la Base de Datos “Demo”. Users y buscamos a “Maria”. Asignaremos db_datareader y
db_datawriter.
10. Nuevamente regresamos a la sesión de Windows “Maria”. Y verificamos los cambios.
Podemos ver las Tablas. Y podemos hacer consulta de búsqueda e inserción de datos.
11. En la sesión Administrador. Buscamos el user “Maria” y vamos a la sección Securables.
Los Securables o “Asegurables” nos van a dar la opción de asignar permisos al usuario
a determinados objetos y determinadas acciones.
12. En securables seleccionamos Search, “All Objects of the types”, “Tables”. Por ejemplo:
Para tabla Productos definimos que no tendrá permisos para borrar.
13. Regresamos a la sesión “Maria” y verificamos esta acción.
Roles
Cuando hablamos de Roles en SQL Server, tenemos 2 Categorías:
● Server-Level Role: a nivel de servidor
● DataBase-Level Role: a nivel de base de datos
securityadmin Administran los inicios de sesión y sus propiedades. Administran los permisos de
servidor GRANT, DENY y REVOKE. También administran los permisos de base
de datos GRANT, DENY y REVOKE. Asimismo, pueden restablecer las
contraseñas para los inicios de sesión de SQL Server.
processadmin Pueden finalizar los procesos que se ejecutan en una instancia de SQL
Server.
3
Tomado de TechNet (s.f.). Roles de Nivel de Base de Datos. Recuperado de:
https://technet.microsoft.com/es-es/library/ms189121(v=sql.105).aspx
14
setupadmin Pueden agregar y quitar los servidores vinculados.
bulkadmin Pueden ejecutar la instrucción BULK INSERT.
diskadmin Se utiliza para administrar archivos de disco.
dbcreator Pueden crear, modificar, quitar y restaurar cualquier base de datos.
public Cada inicio de sesión de SQL Server pertenece a la función pública de
servidor. Cuando a una entidad de seguridad de servidor no se le han
concedido ni denegado permisos específicos para un objeto protegible, el
usuario hereda los permisos concedidos a la función pública para ese
elemento. Solo asigne los permisos públicos en cualquier objeto cuando
desee que el objeto esté disponible para todos los usuarios.
4
Tomado de TechNet (s.f.). Roles de Nivel de Base de Datos. Recuperado de:
https://technet.microsoft.com/es-es/library/ms189121(v=sql.105).aspx
15
Para verificar que el usuario está funcionando correctamente, oprimimos el icono de
conectar como se muestra en la siguiente figura.
USE MASTER
GO
SELECT SUSER_SNAME()
USE DB_Delitos1
GO
REVERT -- REVERTIMOS
USE DB_Delitos1
GO
CREATE USER L1
GO
16
-- Ahora nos ponemos como L1
USE DB_Delitos1
GO
REVERT -- REVERTIMOS
USE DB_Delitos1
GO
DROP USER L1
/*****/
➢ Dar permiso
USE DB_AT
GRANT alter ON OBJECT::DBO.TBL_deduccion TO JULIO
GO
➢ Denegar permiso
USE DB_AT
DENY insert ON OBJECT::DBO.TBL_deduccion
TO JULIO
GO
➢ Revocar permiso
USE DB_AT
REVOKE alter ON OBJECT::dbo.TBL_deduccion FROM julio
GO
17
7. DOCUMENTACIÓN
Se debe documentar la base de datos, tanto para los usuarios como para los
programadores, ofreciendo manuales de usuario según resulte conveniente e incluyendo
descripciones de los códigos o campos en el diseño de la base de datos para orientar a los
programadores. En esta debe utilizar:
● Los nombres para todos los objetos incluidos en la base de datos (como tablas,
reglas de integridad, consultas, procedimientos, triggers funciones etc.)
● Índices e identificadores únicos para acelerar las búsquedas y permitir ligar tablas
de datos.
/***********/
/**Muestra el catálogo, tablas, columnas, columnas por defecto*/
/**consulta para SQL Server 2008 que muestra: tabla, Columna, Tipo de dato, Tamaño
del dato***/
18
Puede cambiar la condición según el objeto que busque
Tipo de objeto:
C = Restricción CHECK
D = DEFAULT (restricción o independiente)
F = Restricción FOREIGN KEY
FN = Función escalar de SQL
P = Procedimiento almacenado de SQL
PK = Restricción PRIMARY KEY
TA = Desencadenador DML del ensamblado (CLR)
TF = Función con valores de tabla SQL
TR = Desencadenador DML de SQL
U = Tabla (definida por el usuario)
UQ = Restricción UNIQUE
V = Vista
Ejemplo de documentación:
Sistema propuesto5
5
Tomado de Feliciano, A. (Julio 7 de 2015). Análisis y Estudio de Requerimientos Taller Mecánico.
Recuperado de http://documents.mx/documents/analisis-y-estudio-de-requerimientos-taller-
mecanico.html#
19
Modelo entidad relación de la situación propuesto
Diccionario de Datos
Projectname :MECA
Projectauthor :Alberto Feliciano
Projectdescripti :Sistema para un
on taller de mecánica
Date report
4/5/2003
20
VEHICULO Modelo VARCHAR2 25 0
VEHICULO Año VARCHAR2 4 0
ORDEN Num_Ord AUTONUMBER 0 0
ORDEN Fecha DATE 0 0
ORDEN FK_Tablilla VARCHAR2 6 0
ORDEN FK_FK_Licencia VARCHAR2 7 0
ORDEN Comentarios VARCHAR2 100 0
SERVICIO Num_Serv AUTONUMBER 0 0
SERVICIO Descripcion VARCHAR2 50 0
SERVICIO Costo MONEY 8 2
EMPLEADO SS VARCHAR2 11 0
EMPLEADO Nombre VARCHAR2 20 0
EMPLEADO Apellido VARCHAR2 35 0
PUEBLO Zip_Code VARCHAR2 10 0
PUEBLO Pueblo VARCHAR2 15 0
MARCA MARCAID AUTONUMBER 0 0
MARCA MARCA_NOMBRE VARCHAR2 75 0
Ord_Serv FK_Num_Ord INTEGER 0 0
Ord_Serv FK_SS VARCHAR2 11 0
Ord_Serv FK_Num_Serv INTEGER 0 0
21
22