6. PROGRAMACIÓN CON TRANSACT-SQL



Documentos relacionados
MANUALITO MS-SQL SERVER

Tema: Procedimientos almacenados y cursores. Facultad : Ingeniería Escuela : Computación Asignatura: SQL SERVER. GUÍA 2 Pág. 1

Tema: PROCEDIMIENTOS ALMACENADOS.

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

Tema: Disparadores Parte I.

1. Se usará la Base de Datos llamada. 2. Borrar la tabla CtasBanc anterior y crearla: 5.1 Procedimientos y Funciones Almacenados SQL Server

Formato para prácticas de laboratorio

Procedimientos almacenados con parametros de salida

PROCEDIMIENTOS ALMACENADOS. CREATE PROCEDURE nombreprocedimiento tipodato [=valordefecto]][,...]

Formato para prácticas de laboratorio

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL.

Curso SQL Nivel Avanzado 1. Miguel Jurado García

BASES DE DATOS SQL MÁS S DE SQL (DML) OPERADOR UNION (L30) <SELECT1> UNION <SELECT2> UNION <SELECTN> Copyright 2006, 2007 Instituto Gala

5.1 Procedimientos y Funciones Almacenados. 5.2 Disparadores (Triggers).

Bases de Datos Relacionales

Bases de Datos Ejercicio Número 2 Bogotá, Diciembre 5 de 2013

Bases de Datos / Elementos de Bases de Datos Que es un Stored Procedure? Stored Procedures: Ventajas

CURSO TRANSACT SQL MANUAL TÉCNICO CURSO TRANSACT SQL MANUAL TÉCNICO 1

Recuperación del Sistema

GUIA DE LABORATORIO N 9 B. (000Webhost Php- Para desarrollar en casa)

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008

Transacciones, copias de seguridad. Xochitl Clemente Parra Armando Méndez Morales

GALA CONCEPTO COMMIT, ROOLBACK SAVEPOINTS (SAVE TRANSACTION) No Consultas. Definiciones Transacciones ( L33 )

LENGUAJE ESTRUCTURADO DE CONSULTAS SQL (2)

ADMINISTRACIÓN DE BASE DE DATOS

Programación SQL. Lucio Salgado Diciembre 2008

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

Repaso. Laboratorio Informix. Stored Procedures. Ejemplo. Creación de stored procedures. Sql en un Procedimiento

m047a Curso Programando una Base de Datos SQL Server 2008, 36 h

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

BASES DE DATOS AVANZADAS Transacciones en MYSQL

Bases de Datos / Elementos de Bases de Datos 2015

Programación de Consultas SQL ADO.Net LDP / DUOC-AV

SQL. (...la guía básica de supervivencia de dmi) Universidad de los Andes Demián Gutierrez Enero

Administradores de Bases de Datos Studio.NET 2005 Y SQL Server Barrios

10 - Desencadenadores.

Formato para prácticas de laboratorio

Laboratorio Informix. Stored Procedures Triggers

4- Uso de sentencias para el envió y extracción de datos

[ EDICION ESPECIAL] En el siguiente ejemplo se agrega un archivo de datos de 5 MB a la base de datos BD_Ejemplo01.

m047a Curso Programando una Base de Datos SQL Server 2008, 36 h Creación B.D. y Constraints

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008

GUÍA DE TRABAJO GRADO 11. Articulación SENA Programación de Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6

APUNTES: APLICACIONES WEB BASADAS EN PHP Y MYSQL Página 1 de 5

Programación de Consultas SQL ADO.Net LDP / DUOC-AV

SQL (Structured Query Language)

PRÁCTICA III. DISPARADORES EN SQL (II)

Restricciones de Integridad

Uso de las herramientas de consulta de Transact-SQL

OBJETIVOS METODOLOGÍA PROCEDIMIENTO 1.- Trabajo con el servidor de bases de datos Sybase

Base de datos Procedimientos Almacenados y Funciones

Base de datos I Facultad de Ingeniería. Escuela de computación.

: COMPUTACIÓN E INFORMATICA : Ingeniería de Software Ingeniería de Redes y Comunicaciones : Administración de Bases de Datos I : T-INF127

Procedimientos, Funciones, Trigger y Cursores en ORACLE

Diseño e Implementación de Bases de Datos

9- Procedimientos almacenados.

ÍNDICE PRIMERA PARTE... 17

PROCEDIMIENTOS ALMACENADOS Y TRIGGERS. Bases de Datos Ingeniería de Sistemas y Computación Universidad Nacional de Colombia 2007

8 SQL SERVER 2008 RA-MA

Enlaces relacionados:

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN FACULTAD DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS LABORATORIO DE BASES DE DATOS 1

Tema 1. Bases de datos activas

Formato para prácticas de laboratorio

Diseño de bases de datos

Estándar de desarrollo de aplicaciones del Govern de les Illes Balears

Módulo VI: Procedimientos y Desencadenadores

FIREBIRD: SQL PROCEDIMENTAL (PSQL)

Implementación de funciones definidas por el usuario

T12 Vistas y tablas temporales

Lic. Vladimir Cotaquispe Gutierrez PROGRAMACIÓN PL/SQL I - 1. Copyright 2008, Oracle. All rights reserved.

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

Formato para prácticas de laboratorio

Conceptos de Bases de Datos Relacionales Triggers

8 MICROSOFT SQL SERVER 2008 R2. CURSO PRÁCTICO RA-MA

Disparadores en Oracle (Ejemplos Prácticos)

Haga clic para PostgreS cambiar el estilo

El Lenguaje PL/SQL. Un lenguaje de propósito general orientado a la inclusión de sentencias SQL. Estructura del código PL/SQL.

Crear BD en. Isis Bonet Cruz, PhD

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo:

Índice. iii. Objetivos... 24

ÍNDICE. Introducción... Capítulo 1. Novedades, mejoras y requisitos para la instalación... 1

CURSORES EN SQL SERVER

CURSO DE SQL SERVER 2005

Sistemas de Datos Curso: Ernesto Chinkes. Subconsultas Stored Procedures - Triggers

Integridad en sistemas de bases de datos relacionales

Introducción al SQL embebido

Restricciones (constraints) FOREIGN KEY

Bases de datos relacionales y el modelo entidad-relación

m046a Curso Consultando SQL Server 2005/2008 con Transact-SQL, 15 h

CLAVE DE UNIDAD DE APRENDIZAJE DURACIÓN (HORAS) NOMBRE DE LA PRÁCTICA. Tópicos de arquitectura de computadoras. Comandos SQL 2

Sentencias complementarias + Disparadores

Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar:

Modelamiento y Diseño de Base de Datos

PROCEDIMIENTOS ALMACENADOS

SQL: Vistas, Triggers, y Procedimientos Almacenados

SQL dinámico en Transact SQL

Transcripción:

6. PROGRAMACIÓN CON TRANSACT-SQL 6.1. Introducción. " # 6.2. Declaración y asignación de variables. $ " % & ' # ( % ) # (( ) *$+,$ " $ # &-' $ $. $" / # 0 1$,$2 DECLARE @limite money SET @limite = 10 SELECT * FROM articulos WHERE precio <= @limite 3% # $$+ $%#$$+ 4 $$+ # 5 ) " $ # $$+ /. $. " /.

6 DECLARE @precio_min smallmoney, @precio_max smallmoney SELECT @precio_min = MIN(precio), --Variables asignadas @precio_max = MAX(precio) --SELECT de asignación FROM precios SELECT @precio_min, @precio_max --Variables devueltas SELECT «normal» 47 $$+ %"# $ 3. $ 2 SET @precio_min=0, @precio_max=100 # $$+ % 7 *. $.2 2 + + 6, 8 9 : ; "6<=. 2 DECLARE @Concepto varchar(30) SELECT @Concepto=Concepto FROM articulos SELECT @Concepto $ $$+ 2; "6<= 3 > $$+ ) "/. $$+ 3.2. "#$" DECLARE @Nombre varchar(20) SELECT @Nombre = Autor FROM libros WHERE Autor like '%Cervantes%' SELECT @Nombre -- devolver el nombre como un resultado

9 SELECT @Nombre = Autor FROM libros WHERE Autor like '%Kafka%' SELECT @Nombre -- devolver el nombre como un resultado 6.3. Control de flujo. +. ).* 2?$8@5$5* *)?$8@5 /@A$$0 1@$&. ' 3 +?$8@5$5*#BC @A$$ 01@$ *) +, &' ) 8>>$ +7 ) )2%&'( Para más información consultar: Libros en Pantalla Búsqueda - Lenguaje de control de flujo En cuanto a funciones ver: Libros en Pantalla Búsqueda - Funciones (T-SQL) 6.4. Procesos por lotes. 4 & %' "..+ % ) ) '& '% & ' # 7 INSERT socios VALUES (etc.) SELECT * FROM socios UPDATE libros SET Autor = (etc.) GO -- comando que indica que todo lo anterior se envíe -- como un proceso por lotes. 7 # $ ). 3.. ) ' SELECT * FROM libros SELECT * FOM socios GO

: Al ejecutar este proceso por lotes, se recibirá el siguiente error: Servidor: mensaje 170, nivel 15, estado 1 Línea 2: sintaxis incorrecta cerca de 'fom'. $$+) 8>." % A,>; A>; %/ 2 SELECT * FROM libros SELECT * FROM scios GO 9 #. %. $. $$+.2 Servidor:mensaje 208, nivel 16, estado 1 El nombre de objeto scios no es válido 5 %/.. % 5 % 5 # ) ' 7 " ". $D$+4, & ) AE' ) ' / $ $D$+4,&AE' *) $F) % &. ) '' 7. $ & ' " ) 4.. ). & '"% % ". $# # % G

H 6.5. Transacciones " #5 #3. # ) 4 # % +>;;@,5+@>5 %,>?+I,5+@>5 J%?$8@5,5"+>;;@,5 %. $.. @ )%K) BEGIN TRAN INSERT prestamos VALUES(,, etc.) UPDATE ejemplares SET disponible = 0 where signatura = etc. COMMIT TRAN GO ) 2 + * ) ) % )L % 4 ) ) %?$8@5,5 +?$8@5,5" +>;;@,5,>?+I,5 % +>;;@,>?+I $ $ @; 3@+@M,5+@>5>5 7 ) " )% +>;;@,5>%,>>?+I % ) $$+ 3 % % ) &@5$,43*$"*$$$'

E Comprobación de errores en las transacciones 4 # '&' )" ) " / J /.2 create table a(a char(1) primary key) create table b(b char(1) references a) create table c(c char(1)) begin transaction insert c values ('X') insert b values ('X') - falla la referencia commit transaction select * from c -- Devuelve 'X' # %. L)% % " ) )3). )&.'. 7 ). +>;;@ ) $ % %% (( $,,>, # $ N+M?>, ; / &(( $,,>,) % 7'2 begin transaction insert c values ('X') if (@@error <> 0) to Hay_error insert b values ('X') - falla la referencia if (@@error <> 0) to Hay_error commit transaction Hay_error: rollback transaction select * from c -- No devuelve 'X', ya que no se confirma

O >) $ N+M?>, / ) & (( $,,>, PQ / ' $/ ) '&'2 set xact_abort on begin transaction insert c values ('X') insert b values ('X') - falla la referencia commit transaction select * from c -- No devuelve 'X' -- puesto que ante el error el proceso por -- lotes se ha interrumpido, -- la transacción no se ha confirmado -- y se trata ésta de forma atómica N+M?>, 3.%". %. 6.6. Procedimientos Almacenados. % " %/. ). / " 1" )& '" ) & ' +,$$ 3,>+$*4,$4 2 CREATE PROCEDURE NombreProcedimiento [ {@parámetro tipodatos }[= predeterminado] [OUTPUT] ] [WITH ENCRIPTION] AS instrucciónsql [...n] RETURN n + # >434 ) ) #

< % #)#. / # >434# ) %# ) # ). # %)#. $5+,R3@>5 ) +,$$ 3,>+$*4,$ $ $5+,R3@>5 4 #% /.. $ # $N$+4$$ 2 [[EXEC[UTE]] [@valor_de_retorno=] NombreProcedimiento [[@parámetro =] {valor @variable [OUTPUT] [DEFAULT]] [, n] J%. ". 3 >* " 2 CREATE PROC ObtenerTitulosDeAutor @autor nvarchar(20) AS SELECT titulo FROM libros WHERE autor like '%'+@autor+'%' $. 2 ObtenerTitulosDeAutor 'Cervantes' o EXEC ObtenerTitulosDeAutor 'Cervantes' o EXEC ObtenerTitulosDeAutor @autor='cervantes'

S 3 ) ") / ) & ) ' ((,>0+>45& 7)) 7 ' $ CREATE PROC CuentaSociosyLibros @CuentaSocios int OUTPUT, @CuentaLibros int OUTPUT AS SELECT * FROM Socios SELECT @CuentaSocios=@@ROWCOUNT SELECT * FROM Libros SELECT @CuentaLibros=@@ROWCOUNT Después, el procedimiento se ejecutaría de la siguiente forma: DECLARE @CuentaLib int, @CuentaSoc int EXEC CuentaSociosyLibros @CuentaLib OUTPUT, @CuentaSoc OUTPUT select Total_Libros=@CuentaLib, @CuentaSoc as Total_Socios L %# *% % )% 5% % / / @ % % ) $ ) @CuentaLib " @CuentaSoc ) " > # (Total_Libros y Total_Socios) ",# " 7." / / " ) $ /" % ) /& '

6.7. DESENCADENADORES (TRIGGERS). ) 4 ) @5$,43*$*$$$ 4 2 CREATE TRIGGER nombredesencadenador ON tabla FOR {[DELETE][,][INSERT][,][UPDATE]} AS instrucciónsql [...n] $ 7" + 2 &+,$$'.&*,>3' ).&$,' 3&8,5",$J>I$' 2 )%F. @5$,43*$ ) *$$$43*$ # 4 43*$ 2 ) " ) " J.2$ % CREATE TRIGGER BorraPrecio ON precios FOR DELETE AS PRINT ' Acaba de eliminar una fila ' 2 DELETE FROM precios WHERE NifPro= 1111 ;

6 $ #7)/ ) $%3. 5)3-T69:HT3 2 ALTER TRIGGER BorraPrecio ON precios FOR DELETE AS declare @contador int select @contador=count(*) from deleted PRINT ' Ha eliminado '+convert(char(3),@contador)+'fila(s)' 6.8. Controlar la integridad referencial mediante triggers / >5*$$$ ++*$ ) " & ) ) ". " ' # ) & @5$, % ) ' & *$$$ % ) ' J /. 3 "3 & 3 99"3 9 ' ) ) A>,$@85I$R) ") $ 2 '*)*+*&#' Use precios SELECT * INTO Prov2 FROM Proveedores SELECT * INTO Arti2 FROM Articulos SELECT * INTO Prec2 FROM Precios,'-)) ',%-%.*/0-.12 *)*+*

66 CREATE TRIGGER InsertarPrecios ON Prec2 FOR insert AS declare @integ_pro int, @integ_art int select @integ_pro=count(*) from inserted join Prov2 on inserted.nifpro=prov2.nif select @integ_art=count(*) from inserted join Arti2 on inserted.codart=arti2.codi if @integ_pro=0 or @integ_art=0 begin if @integ_pro=0 print 'Violación de regla de integridad referencial con la tabla Prov2' if @integ_art=0 print 'Violación de regla de integridad referencial con la tabla Arti2' rollback tran end CREATE TRIGGER BorrarProveedor ON Prov2 FOR delete AS Delete from Prec2 where Prec2.NifPro in (select Nif from deleted) Print 'Se ha activado el trigger BorrarProveedor' Print 'Se ha borrado en cascada en la tabla Prec2' CREATE TRIGGER BorraArticulo ON Arti2 FOR delete AS Delete from Prec2 where Prec2.CodArt in (select codi from deleted) Print 'Se ha activado el trigger BorrarArticulo' Print 'Se ha borrado en cascada en la tabla Prec2' ' delete Prov2 where Nif='1111' delete Arti2 where Codi='11' ' # INSERT INTO Prec2 VALUES ('9999','55',12.50) ",# # / /"