Sie sind auf Seite 1von 22

Diseo y administracin de bases de datos avanzadas

SQL Almacenado

1 de 20

1.1. Introduccin
SQL es un lenguaje potente para trabajar con BBDD, nos permite consultar, crear, modifcar y administrar bases de datos relacinales, pero que no posee la fle ibilidad de los lenguajes de programacin a la !ora de mantener un estado y encadenar acciones sucesi"as sobre los datos# $ara superar esta limitacin, todos los lenguajes de programacin, nos proporcionan librer%as de acceso a bases de datos mediante las cuales combinamos SQL con el lenguaje de programacin# Sin embargo, esta solucin, no siempre es ptima y ser%a con"eniente que la propia BD ofreciera un lenguaje interno de programacin, como efecti"amente !acen todos los productos# &ransact SQL es el lenguaje de programacin que proporciona SQL Ser"er para ampliar SQL con los elementos caracter%sticos de los lenguajes de programacin' "ariables, sentencias de control de flujo, bucles ###

1.2. Entorno de trabajo para ejemplos y ejercicios


(l entorno "a a estar formado por 2 bases de datos con una serie de datos precargados# Las dos siguientes secciones presentan las dos bases de datos a utili)ar#

1.2.1. Base de dato de Congresos


(structura de la BD'

*omo "emos consta de cuatro tablas, cada una con su cla"e y sus campos# (n el caso de la tabla Sesin la cal"e est+ formada por dos campos' d%a y nums# Las relaciones e istentes entre las tablas !an producido la e istencia de cla"es e ternas en dos tablas'

2 de 20

La descripcin de estas tablas es la siguiente' - (n la tabla sesin aparece dni como cla"e e terna, que es la cla"e de la tabla $onente y representa que cada sesin est+ presidida por un ponente del congreso# &ambi.n aparece numsala como cla"e e terna, que es la cla"e de la tabla Sala y representa que cada sesin se celebrar+ en una sala# - (n la tabla $onencia aparece dni como cla"e e terna, que es la cla"e de la tabla $onente y representa que cada ponencia es presentada por un ponente# &ambi.n aparece la cla"e de la tabla Sesin /d%a0nums1 como cla"e e terna y representa que cada ponencia est+ incluida en una sesin del congreso# 2 las restricciones de los campos son las siguientes' - (n una sala determinada puede que no se celebre ninguna sesin del congreso o que se celebren "arias# - &odas las sesiones deben tener asignada una sala en la que se "an a celebran y un ponente que las "a a presidir, por tanto estos campos no podr+n tomar el "alor null# - 3n ponente puede o no presidir alguna sesin y puede presidir m+s de una# Lo mismo ocurre con la presentacin de ponencias, un ponente puede no presentar ninguna ponencia y asistir al congreso solo para presidir alguna sesin o como oyente, pero tambi.n, puede presentar m+s de una ponencia# - 3na ponencia tiene que estar incluida obligatoriamente en una sesin y tener asignado un ponente que la presentar+, por tanto estos campos /dni y d%a0nums1 no podr+n tomar el "alor null# - (l campo capacidad de la tabla Sala es obligatorio /no puede ser null1 y debe estar comprendido entre 24 y 55 personas# - (l campo nombre de la tabla $onente tambi.n es obligatorio /no puede ser null1 y adem+s es 6nico, no pueden dos ponentes tener el mismo nombre, lo que le con"ierte en una cla"e candidata#

Sentencias SQL de creacin de las tablas.


7 continuacin se muestran las sentencias SQL necesarias para crear las tablas del modelo de datos propuesto' *8(7&( &7BL( Sala / 9omsala :78*;78/51 $8<=782 >(2, *apacidad <9&(?(8 9@& 93LL *;(*> /*apacidad B(&A((9 24 79D 551, $recio <9&(?(8 1B *8(7&( &7BL( $onente / Dni :78*;78/C1 $8<=782 >(2, 9ombre :78*;78/101 9@& 93LL 39<Q3(, $ais :78*;78/101, @rgani)acion :78*;78/101,

, de 20

$uesto 1B

:78*;78/201

*8(7&( &7BL( Sesion / Dia D7&(&<=(, 9ums 93=(8<*/1,01, 9omsala :78*;78/51 9@& 93LL, Dni :78*;78/C1 9@& 93LL, &itulsesion :78*;78/241, $8<=782 >(2 /Dia,9ums1, E@8(<?9 >(2 /Dni1 8(E(8(9*(S $onente/Dni1, E@8(<?9 >(2 /9omsala1 8(E(8(9*(S Sala/9omsala1 1B *8(7&( &7BL( $onencia / *odponencia :78*;78/41 $8<=782 >(2, Dia D7&(&<=( 9@& 93LL, 9ums 93=(8<*/1,01 9@& 93LL, &itulponencia :78*;78/241, Dni :78*;78/C1 9@& 93LL, E@8(<?9 >(2 /Dni1 8(E(8(9*(S $onente/Dni1, E@8(<?9 >(2 /Dia,9ums1 8(E(8(9*(S Sesion /Dia,9ums11B

Verificacin de la estructura creada.

D de 20

Carga de datos en las tablas de Congresos.


$ara terminar de crear el entorno de trabajo debemos llenar con datos las tablas creadas, ejecutando en el editor las sentencias SQL necesarias# Las sentencias de carga de datos se muestran a continuacin'
INSERT INTO Sala VALUES ('BOSQUE', 50, 200000); INSERT INTO Sala VALUES ('ALAMO', 30, 125000); INSERT INTO Sala VALUES ('SAUCE', 30, 100000); INSERT INTO Sala VALUES ('ROBLE', 25, 150000); INSERT INTO Sala VALUES ('SALA1', 40, 125000); INSERT INTO Sala VALUES ('SALA2', 30, 125000); INSERT INTO Po ! "! VALUES ( '3050#0$0', 'LOPE%', 'AR&ENTINA', 'OR'ENATA', 'TECNICO'); INSERT INTO Po ! "! VALUES ( '4550#0$0', '&ARCIA', 'AR&ENTINA', 'OR'ENATA','&ERENTE'); INSERT INTO Po ! "! VALUES ( '30345#$0', 'ALVARE%', 'AR&ENTINA', 'LO&IC','TECNICO'); INSERT INTO Po ! "! VALUES ( '($)#(0$0', '&OME%', 'AR&ENTINA', 'METRONI*A','ANALISTA'); INSERT INTO Po ! "! VALUES ( '00003443', ''UPONT', '+RANCIA', 'TOUTC,IP','PRO&RAMA'OR'); INSERT INTO Po ! "! VALUES ( '5#)$2341', 'LE&RAN'', '+RANCIA', 'TOUTC,IP','PRO&RAMA'OR'); INSERT INTO Po ! "! VALUES ( '33344550', '-U', '.APON', 'METRONI*A','ANALISTA'); INSERT INTO Po ! "! VALUES ( '0000#0$0', 'ANIMOTO', '.APON', 'METRONI*A','ANALISTA'); INSERT INTO Po ! "! VALUES ( '354#)0$0', 'TECCA', 'ITALIA', 'TERMICOMP','TECNICO'); INSERT INTO Po ! "! VALUES ( '($)#00$0', 'CARLOTI', 'ITALIA', 'TERMICOMP','ANALISTA'); INSERT INTO Po ! "! VALUES ( '30500000', 'BOLO&NINI', 'ITALIA', 'TERMICOMP','PRO&RAMA'OR'); INSERT INTO Po ! "! VALUES ( '30))))$0', 'SMIT,', 'EEUU', 'LO&IC', '&ERENTE'); INSERT INTO Po ! "! VALUES ( '30(0#0(0', '.ONES', 'EEUU', 'LO&IC','COMERCIAL'); INSERT INTO Po ! "! VALUES ( '0050#0$0', 'SPENCER', 'EEUU', 'LO&IC','ANALISTA'); INSERT INTO Po ! "! VALUES ( '1$2)35$0', 'SIMPSON', 'EEUU', 'TERMICOMP','COMERCIAL'); INSERT INTO S!/0o VALUES ( '0110#1 200#',1,'BOSQUE','3050#0$0',',AR'2ARE'); INSERT INTO S!/0o VALUES ( '0110#1200#',2,'BOSQUE','30))))$0',',AR'2ARE'); INSERT INTO S!/0o VALUES ( '0210#1200#',1,'ALAMO','00003443','COMUNICACIONES'); INSERT INTO S!/0o VALUES ( '0210#1200#',2,'ALAMO','354#)0$0','COMUNICACIONES'); INSERT INTO S!/0o VALUES ( '0210#1200#',3,'SAUCE','3050#0$0','COMUNICACIONES');

4 de 20

INSERT INTO S!/0o VALUES ( '0210#1200#',4,'BOSQUE','33344550','COMUNICACIONES'); INSERT INTO S!/0o VALUES ( '0310#1200#',1,'SAUCE','30))))$0','BASES 'E 'ATOS');

F de 20

INSERT INTO S!/0o VALUES ( '0310#1200#',2,'BOSQUE','30))))$0','INTELI&ENCIA ARTI+ICIAL'); INSERT INTO S!/0o VALUES ( '0410#1200#',1,'ROBLE','3050#0$0','O+IMATICA'); INSERT INTO S!/0o VALUES ( '0410#1 200#',2,'ROBLE','00003443','O+IMATICA'); INSERT INTO S!/0o VALUES ( '0410#1200#',3,'ALAMO','354#)0$0','SISTEMAS OPERATIVOS'); INSERT INTO Po ! 30a VALUES ( '00010','0110#1200#',1,'TERMINALES','4550#0$0'); INSERT INTO Po ! 30a VALUES ( '00020','0110#1200#',1,'IMPRESORAS','($)#00$0'); INSERT INTO Po ! 30a VALUES ( '00030','0110#1 200#',2,''I&ITALI%A'ORES','30(0#0(0'); INSERT INTO Po ! 30a VALUES ( '00040','0110#1200#',2,'PERI+ERICOS','33344550'); INSERT INTO Po ! 30a VALUES ( '00050','0210#1200#',1,'RE'ES 'E OR'ENA'OR','00003443'); INSERT INTO Po ! 30a VALUES ( '000#0','0210#1200#',2,'ARQUITECTURA 'E RE'ES','5#)$2341'); INSERT INTO Po ! 30a VALUES ( '000)0','0210#1200#',2,'RE'ES 'E AREA LOCAL','0000#0$0'); INSERT INTO Po ! 30a VALUES ( '000$0','0210#1200#',3,'PROTOCOLOS','30500000'); INSERT INTO Po ! 30a VALUES ( '000(0','0210#1 200#',4,'ESTAN'ARES','30345#$0'); INSERT INTO Po ! 30a VALUES ( '00100','0210#1 200#',4,'NORMATIVAS','1$2)35$0'); INSERT INTO Po ! 30a VALUES ( '00110','0310#1200#',1,'B4'4 &RA+ICAS','($)#(0$0'); INSERT INTO Po ! 30a VALUES ( '00120','0310#1200#',1,'B4'4 RELACIONALES','354#)0$0'); INSERT INTO Po ! 30a VALUES ( '00130','0310#1200#',2,'SISTEMAS E5PERTOS','($)#(0$0'); INSERT INTO Po ! 30a VALUES ( '00140','0310#1200#',2,'PROLO&','0050#0$0'); INSERT INTO Po ! 30a VALUES ( '00150','0410#1200#',1,',O.AS 'E CALCULO','30(0#0(0'); INSERT INTO Po ! 30a VALUES ( '001#0','0410#1200#',2,'AUTOE'ICION','30))))$0'); INSERT INTO Po ! 30a VALUES ( '001)0','0410#1200#',3,'MS1'OS','($)#00$0'); INSERT INTO Po ! 30a VALUES ( '001$0','0410#1200#',3,'UNI5','5#)$2341');

G de 20

1.2.2. Base de dato de Recetas


$rocedemos a!ora a crearnos una nue"a base de datos siguiendo los mismos pasos que !emos desarrollado para la anterior# La llamaremos HrecetasI# La estructura de datos que "amos a utili)ar en esta pr+ctica representa una base de datos para la gestin de recetas de cocina# 7 este modelo le corresponde la siguiente estructura f%sica'

Creacin de tablas en la bases de datos de Recetas


3S( recetas *8(7&( &7BL( *ocinero / Dni :78*;78/C1 $8<=782 >(2, 9ombreJcoci :78*;78/241 1B *8(7&( &7BL( :ino / *odJ"ino :78*;78/41 $8<=782 >(2, 9ombreJ"ino :78*;78/241, ?radoJal <9&(?(8 9@& 93LL *;(*> /?radoJal B(&A((9 4 79D C01 1B *8(7&( &7BL( <ngrediente / *odJingr :78*;78/41 $8<=782 >(2, 9ombreJingr :78*;78/241

C de 20

1B *8(7&( &7BL( 8eceta / *odJrece :78*;78/41 $8<=782 >(2, 9ombreJrece :78*;78/241, &iempo <9&(?(8 *;(*> /&iempo K 4001, *alorias <9&(?(8, *odJ"ino :78*;78/41, Dni :78*;78/C1 9@& 93LL, E@8(<?9 >(2 /*odJ"ino1 8(E(8(9*(S :ino/*odJ"ino1, E@8(<?9 >(2 /Dni1 8(E(8(9*(S *ocinero/Dni1 1B *8(7&( &7BL( 8ecetaJ<ngre / *odJrece :78*;78/41, *odJingr :78*;78/41, *antidad 93=(8<*/F,21, $8<=782 >(2 /*odJrece, *odJingr1, E@8(<?9 >(2 /*odJrece1 8(E(8(9*(S 8eceta/*odJrece1, E@8(<?9 >(2 /*odJingr1 8(E(8(9*(S <ngrediente/*odJingr1 1B

5 de 20

Carga de datos en las tablas de Recetas.


INSERT INTO Co30 !6o VALUES ('00$0(040', '.7a Lo8!9'); INSERT INTO Co30 !6o VALUES ('443#)$54', 'P!:6o &o;!9'); INSERT INTO Co30 !6o VALUES ('$$)#540(', 'C!l0a Sa 3<!9'); INSERT INTO Co30 !6o VALUES ('$)#54433', 'A a O3<oa'); INSERT INTO V0 o VALUES ('=>$()', 'al?a60@o', 10); INSERT INTO V0 o VALUES ('Al($3', ';ala>a', $); INSERT INTO V0 o VALUES ('Al432', 'la;?67/3o', 12); INSERT INTO V0 o VALUES ('>"#5)', ';a6B7!/ :!l 60/3al', 15); INSERT INTO I >6!:0! "! VALUES ('/a540', 'a66o9'); INSERT INTO I >6!:0! "! VALUES ('"C(($', 'a3!0"!'); INSERT INTO I >6!:0! "! VALUES ('/a#00', '>70/a "!'); INSERT INTO I >6!:0! "! VALUES ('><)#5', '8ollo'); INSERT INTO I >6!:0! "! VALUES ('/a(03', 'aDo'); INSERT INTO I >6!:0! "! VALUES ('l3421', 'B7!/o'); INSERT INTO I >6!:0! "! VALUES ('"C545', '<a60 a'); INSERT INTO I >6!:0! "! VALUES ('8l(#0', 'a973a6'); INSERT INTO I >6!:0! "! VALUES ('8l100', '<7!Eo'); INSERT INTO I >6!:0! "! VALUES ('6=))4', '8la"a o'); INSERT INTO I >6!:0! "! VALUES ('6=32(', ';a 9a a'); INSERT INTO I >6!:0! "! VALUES ('8l3)#', 'l03o6'); INSERT INTO I >6!:0! "! VALUES ('><020', 'lo;o'); INSERT INTO I >6!:0! "! VALUES ('/a103', '8a"a"a'); INSERT INTO I >6!:0! "! VALUES ('><54(', '"!6 !6a'); INSERT INTO I >6!:0! "! VALUES ('/a123', '3<a;80@o '); INSERT INTO R!3!"a VALUES ('a0001', '8a!lla', $0, 250, '=>$()', '00$0(040'); INSERT INTO R!3!"a VALUES ('30001', '8ollo al aD0llo', #0, 200, 7ll, '443#)$54'); INSERT INTO R!3!"a VALUES ('=0001', '"a6"a :! B7!/o', 4#, 320, 'Al($3', '$$)#540('); INSERT INTO R!3!"a VALUES ('=0002', ';a3!:o 0a', 15, (0, 'Al432', '$)#54433'); INSERT INTO R!3!"a VALUES ('30002', 'lo;o 3o 8a"a"a/', 55, 2)0, '>"#5)', '$$)#540('); INSERT INTO R!3!"a VALUES ('30003', '"!6 !6a ! /al/a', )2, 1$0, '>"#5)', '00$0(040'); INSERT INTO R!3!"aFI >6! VALUES ('a0001', '/a540', 1000); INSERT INTO R!3!"aFI >6! VALUES ('a0001', '"C(($', 142); INSERT INTO R!3!"aFI >6! VALUES ('a0001', '/a#00', 100); INSERT INTO R!3!"aFI >6! VALUES ('30001', '><)#5', 400); INSERT INTO R!3!"aFI >6! VALUES ('30001', '/a(03', 2); INSERT INTO R!3!"aFI >6! VALUES ('=0001', 'l3421', 300); INSERT INTO R!3!"aFI >6! VALUES ('=0001', '"C545', #0); INSERT INTO R!3!"aFI >6! VALUES ('=0001', '8l(#0', #0); INSERT INTO R!3!"aFI >6! VALUES ('=0001', '8l100', 3); INSERT INTO R!3!"aFI >6! VALUES ('=0002', '6=))4', 4); INSERT INTO R!3!"aFI >6! VALUES ('=0002', '6=32(', 2); INSERT INTO R!3!"aFI >6! VALUES ('=0002', '8l3)#', 042); INSERT INTO R!3!"aFI >6! VALUES ('=0002', '8l(#0', 50); INSERT INTO R!3!"aFI >6! VALUES ('30002', '><020',

10 de 20

1200); INSERT INTO R!3!"aFI >6! VALUES ('30002', '/a103', 400);

11 de 20

INSERT INTO R!3!"aFI >6! VALUES ('30002', '"C(($', 04#); INSERT INTO R!3!"aFI >6! VALUES ('30003', '><54(', $00); INSERT INTO R!3!"aFI >6! VALUES ('30003', '"C(($', 143); INSERT INTO R!3!"aFI >6! VALUES ('30003', '/a(03', 1); INSERT INTO R!3!"aFI >6! VALUES ('30003', '/a123', 250); INSERT INTO R!3!"aFI >6! VALUES ('30003', '8l3)#', 044);

2.

Ejercicios prcticos con T-SQL.

3na "e) establecido el entorno de trabajo, proponemos reali)ar una serie de ejercicios que nos permitir+n manipular informacin sobre el contenido de las tablas, de forma indi"idual o combinada, utili)ando los diferentes mecanismos proporcionados por el lenguaje procedimental &ransact#SQL#

2.1. Ejemplo 1 Utilizacin de variables


=ostrar los ponentes que pertenecen a un pa%s determinado por el "alor de una "ariable# D(*L78( Lprocedencia "arc!ar/101 S(& Lprocedencia M NjaponN S(L(*& O E8@= ponente A;(8( pais M Lprocedencia

2.2. Ejemplo 2 Utilizacin de variables


=ostrar la capacidad m+ ima y m%nima de las salas del congreso## D(*L78( Lmincapacidad int D(*L78( Lma capacidad int S(L(*& Lmincapacidad M =<9/capacidad1, Lma capacidad M =7P /capacidad1 E8@= S7L7 S(L(*& Lmincapacidad, Lma capacidad

2.3. Ejemplo 3 Utilizacin de variables


8ecuperar la capacidad de una sala que e iste y luego de una que no e iste# declare Lcapsala int set LcapsalaM0 S(L(*& LcapsalaM*7$7*<D7D E8@= S7L7 A;(8( 9@=S7L7MN7L7=@N select Lcapsala declare Lcapsala int set LcapsalaM0 S(L(*& LcapsalaM*7$7*<D7D E8@= S7L7 A;(8( 9@=S7L7MN$<$$@N select Lcapsala

12 de 20

2.4. Ejemplo 4 Utilizacin de variables


=ostrar el nombre del presidente cuyo dni es el ,040F0C0 junto con los datos de las sesiones que preside## D(*L78( Lnombre "arc!ar/101 S(L(*& LnombreMnombre E8@= ponente A;(8( dniMN,040F0C0N S(L(*& Q9ombre del $residente'Q MLnombre, O E8@= Sesion R!ere dni M N,040F0C0N

2.5. Ejemplo 5 Utilizacin de variables


=ostrar la capacidad de una sala determinada junto con el total de las capacidades de todas las salas y el S que representa con respecto a este total# D(*L78( Lcapsala int S(L(*& LcapsalaM*7$7*<D7D E8@= S7L7 A;(8( 9@=S7L7MN7L7=@N S(L(*& Q*apacidad sala' QMLcapsala, Q*apacidad total' QMS3=/*7$7*<D7D1, Q$orcentaje sobre el totalQ M/LcapsalaO10010S3=/*7$7*<D7D1 E8@= S7L7

2. . Ejemplo

Utilizacin de variables

<ntercambiar los contenidos de las columnas en una tabla## D(*L78( Lau iliar "arc!ar/101 3$D7&( $@9(9&( S(& @8?79<T7*<@9MLau iliar S(L(*& O E8@= $@9(9&( Lau iliarM$7<S, $7<SM@8?79<T7*<@9,

2.!. Ejemplo ! Utilizacin de i"..else


=ostrar las salas o ponentes en funcin de una opcin D(*L78( Lopcion "arc!ar/101 S(& Lopcion M NsalaN <E Lopcion M NsalaN S(L(*& O E8@= S7L7 (LS( S(L(*& O E8@= $@9(9&( *ambiar a!ora el "alor de opcin a otro cualquiera D(*L78( Lopcion "arc!ar/101 S(& Lopcion M NsaluN <E Lopcion M NsalaN S(L(*& O E8@= S7L7 (LS( S(L(*& O E8@= $@9(9&(

1, de 20

2.#. Ejemplo # Utilizacin de i"..else


=ostrar las salas o ponentes en funcin de una opcin obtenida de una tabla *8(7&( &7BL( @$*<@9(S /@$*<@9 "arc!ar/2011 <9S(8& @$*<@9(S :7L3(S /NsalaN1 D(*L78( Lopcion "arc!ar/101 S(L(*& Lopcion M @$*<@9 E8@= @$*<@9(S <E Lopcion M NsalaN S(L(*& O E8@= S7L7 (LS( S(L(*& O E8@= $@9(9&(

2.$. Ejemplo $ Utilizacin de i"..else


@btener las salas con capacidad entre ,0 y D0, o todas si no e iste ninguna con este rango D(*L78( Lmensaje "arc!ar/1001 <E /S(L(*& *@39&/O1 E8@= S7L7 A;(8( *7$7*<D7D B(&A((9 ,0 79D D01 U 0 B(?<9 S(& Lmensaje M N;ay "arias salas con capacidad entre ,0 y D0 personas# (stas son'N $8<9& Lmensaje S(L(*& QSalasQM9@=S7L7 E8@= S7L7 A;(8( *7$7*<D7D B(&A((9 ,0 79D D0 (9D (LS( B(?<9 S(& Lmensaje M N9o !ay salas con capacidad entre ,0 y D0# Las capac# de todas son'N $8<9& Lmensaje S(L(*& QSalasQM9@=S7L7, *7$7*<D7D E8@= S7L7 (9D

2.1%. Ejemplo 1% Utilizacin de &ase...'(en


*ambiar los precios de alquiler de las salas# Las salas con capacidad inferior a 40 costar+n 100#000 Las salas con capacidad igual a 40 costar+n 140#000 Las salas con capacidad mayor de 40 costar+n 1G4#000 3$D7&( S7L7 S(& $8(*<@ M *7S( A;(9 *7$7*<D7D K 40 &;(9 100000 A;(9 *7$7*<D7D M 40 &;(9 140000 (LS( 1G4000 (9D

1D de 20

2.11. Ejemplo 11 Utilizacin de )(ile.


<nsertar en una tabla n6meros K100 no m6ltiplos de 4 *8(7&( &7BL( @$*<@9(S /@$*<@9 "arc!ar/2011 D(*L78( L int S(& L M 0 A;<L( L K 100 B(?<9 S(& L M L V 1 <E L S 4 M 0 *@9&<93( <9S(8& @$*<@9(S :7L3(S /N@pcion NVS&8/L 11 (9D S(L(*& O E8@= @$*<@9(S

2.12. Ejemplo 12 Utilizacin de )(ile.


(n el caso de que el precio medio de las salas sea inferior a 1G4#000, aumentar el precio de las salas con incrementos de 1000 !asta que el precio mayor sea 150#000 Begin transaction select O from sala A;<L( /S(L(*& 7:?/$8(*<@1 E8@= S7L71 K 1G4000 B(?<9 3$D7&( S7L7 S(& $8(*<@ M $8(*<@ V 1000 <E /S(L(*& =7P/$8(*<@1 E8@= S7L71 UM 150000 B8(7> (LS( *@9&<93( (9D select O from sala rollbacW

2.13. Ejemplo 13 *otes


$robar las siguientes secuencias de comandos# 1# S(L(*& O E8@= S7L7 S(L(*& O E@= $@9(9&(S 0O (rror O0 go 2# S(L(*& O E8@= S7L7 go S(L(*& O E@= $@9(9&(S 0O (rror O0 go

14 de 20

2.14. Ejemplo 14 +ransacciones


$robar las siguientes secuencias de comandos# B(?<9 &879S7*&<@9 <9S(8& S7L7 :7L3(S /N93(:7N, F0, 1000001 S(L(*& O E8@= S7L7 8@LLB7*> &879S7*&<@9 S(L(*& O E8@= S7L7

2.15. Ejemplo 15 +ransacciones.


$robar las siguientes secuencias de comandos# *8(7&( &7BL( *3(9&7S /&<&3L78 "arc!ar/201, S7LD@ money1 <9S(8& *3(9&7S :7L3(S /NXuan ?arciaN, 10000001 <9S(8& *3(9&7S :7L3(S /N7na $ere)N, 4000001 B(?<9 &879S7*&<@9 3$D7&( *3(9&7S S(& S7LD@MS7LD@Y100000 A;(8( &<&3L78MNXuan ?arciaN 3$D7&( *3(9&7S S(& S7LD@MS7LD@V100000 A;(8( &<&3L78MN7na $ere)N *@==<& &879S7*&<@9

2.1 . Ejemplo 1 +ratamiento de errores.


$robar las siguientes secuencias de comandos# B(?<9 &82 D(*L78( Ldi"isor int , Ldi"idendo int, Lresultado int S(& Ldi"idendo M 100 S(& Ldi"isor M 0 YY (sta linea nos da un error S(& Lresultado M Ldi"idendo0Ldi"isor $8<9& N9o !ay errorN (9D &82 B(?<9 *7&*; $8<9& NSe !a producido un errorN (9D *7&*; Las funciones especiales de error, est+n disponibles 6nicamente en el bloque CATCH para la obtencin de informacin detallada del error# Son' ERROR_N !"ER#$, de"uel"e el n6mero de error#

1F de 20

ERROR_SEVER%T&#$, de"uel"e la se"eridad del error# ERROR_STATE#$, de"uel"e el estado del error# ERROR_'ROCE( RE#$, de"uel"e el nombre del procedimiento almacenado que !a pro"ocado el error# ERROR_L%NE#$, de"uel"e el n6mero de l%nea en el que se !a producido el error# ERROR_!ESSA)E#$, de"uel"e el mensaje de error# $robar las siguientes secuencias de comandos# B(?<9 &82 D(*L78( Ldi"isor int , Ldi"idendo int, Lresultado int S(& Ldi"idendo M 100 S(& Ldi"isor M 0 YY (sta linea da un error S(& Lresultado M Ldi"idendo0Ldi"isor $8<9& N9o !ay errorN (9D &82 B(?<9 *7&*; $8<9& (88@8J93=B(8/1 $8<9& (88@8JS(:(8<&2/1 $8<9& (88@8JS&7&(/1 $8<9& (88@8J$8@*(D38(/1 $8<9& (88@8JL<9(/1 $8<9& (88@8J=(SS7?(/1 (9D *7&*;

2.1!. Ejemplo 1! +ratamiento de errores.


3tili)acin de la "ariable global de sistema LL(88@8# D(*L78( Ldi"isor int , Ldi"idendo int , Lresultado int S(& Ldi"idendo M 100 S(& Ldi"isor M 0 YY (sta linea pro"oca un error de di"ision por 0 S(& Lresultado M Ldi"idendo0Ldi"isor <E LL(88@8 M 0 B(?<9 $8<9& N9o !ay errorN (9D (LS( B(?<9 $8<9& N;ay errorN (9D 1G de 20

(jecutar a!ora' D(*L78( Ldi"isor int , Ldi"idendo int , Lresultado int S(& Ldi"idendo M 100 S(& Ldi"isor M 0 YY (sta linea pro"oca un error de di"ision por 0 S(& Lresultado M Ldi"idendo0Ldi"isor $8<9& N*ontrolando el error ###N YY (sta linea estable LL(88@8 a cero <E LL(88@8 M 0 B(?<9 YY Se ejecuta esta parteZ $8<9& N9o !ay errorN (9D (LS( B(?<9 $8<9& N;ay errorN (9D

2.1#. Ejemplo 1# +ratamiento de errores.


Eor)ar un error en tiempo de ejecucin a tra".s de la funcin 87<S(88@8# D(*L78( Ltipo int, Lclasificacion int S(& Ltipo M 1 S(& Lclasificacion M , <E /Ltipo M 1 79D Lclasificacion M ,1 B(?<9 87<S(88@8 /N(l tipo no puede "aler uno y la clasificacion ,N, 1F, YY Se"eridad 1 YY (stado 1 (9D La funcin 87<S(88@8 recibe tres par+metros, el mensaje del error /o cdigo de error predefinido1, la se"eridad y el estado# La se"eridad indica el grado de criticidad del error# 7dmite "alores de 0 al 24, pero solo podemos asignar "alores del 0 al 1C# (l resto son considerados fatales por el sistema, y cerraran la cone in que ejecuta el comando RA%SERROR#

1C de 20

2.1$. Ejemplo 1$ ,unciones de ,ec(a y de &adenas de &aracteres.


(jecutar las siguientes sentencias de una en una y obser"ar el resultado# select O from sesion select 9omsala, &itulsesion, datepart /year,dia1 from sesionB select 9omsala, datename /mont!,dia1 from sesionB select 9omsala, datediff/year,dia,getdate/11 from sesionB select 9omsala from sesion R!ere datepart/day,dia1MDB select substring/titulponencia,4,51 as titulo from ponencia select left/titulponencia,41 as titulo from ponencia select nomsala, str/precio,21 from sala select nomsala, str/precio,51 from sala select L@A(8/titulponencia1 from ponencia

2.2%. Ejemplo 2% ,unciones creadas por el usuario.


create function fJpromedio /L"alor1 decimal/D,21, L"alor2 decimal/D,21 1 returns decimal /F,21 as begin declare Lresultado decimal/F,21 set LresultadoM/L"alor1VL"alor2102 return Lresultado endB select dbo#fJpromedio/4#4,C#41B create function fJsesiones /Lnomsala "arc!ar/51MN7L7=@N1 returns table as

15 de 20

return / select dia, nums, dni, titulsesion from sesion R!ere nomsala liWe NSNVLnomsalaVNSN 1B Llamamos a la funcin creada anteriormente en"iando una sala' select Ofrom fJsesiones/[S73*(\1B select Ofrom fJsesiones/D(E73L&1B

20 de 20

2.21. Ejercicio 1
:amos a trabajar con la tabla QlibroQ de una librer%a# 1Y (liminamos la tabla si e iste'
if object_id('libros') is not null drop table libros;

2Y *reamos la tabla'
create table libros( codigo int identity, titulo varchar(40) not null, autor varchar(30), editorial varchar(20), precio deci al(!,2), cantidad tinyint, pri ary "ey (codigo) );

,Y <ntroducimos los siguientes registros'


insert into libros values('#no','$ichard %ach','&laneta','!,'00); insert into libros values('(l aleph','%orges','( ece',20,'!0); insert into libros values(')prenda &*&','+ario +olina',',uevo siglo',!0,200); insert into libros values(')licia en el pais de las aravillas','-e.is /arroll','( ece','!,0); insert into libros values('0ava en '0 inutos','+ario +olina','( ece',40,200);

D ] Se solicita' =ostrar los t%tulos de los cuales no !ay libros disponibles /cantidadM01B en caso que no !aya, mostramos un mensajeB ;acer un descuento del 10S a todos los libros de editorial Q(meceQB si no !ay, mostramos un mensajeB (liminar los libros de los cuales no !ay stocW /cantidadM01B si no !ay, mostramos un mensaje'

2.22. Ejercicio 2
3na empresa registra los datos de sus empleados en una tabla llamada QempleadosQ# 1Y (liminamos la tabla QempleadosQ si e iste'
if object_id('e pleados') is not null drop table e pleados;

2Y *reamos la tabla'
create table e pleados( docu ento char(1) not null,

21 de 20

no bre varchar(30) not null, se2o char('), fechanaci iento dateti e, sueldo deci al(!,2), pri ary "ey(docu ento) );

,Y <ntroducimos algunos registros'


insert into e pleados values ('22333'''','0uan &ere3',' ',''040!4'560',!!0); insert into e pleados values ('2!444444','7usana +orales','f',''04''4856!',8!0); insert into e pleados values ('20'''222','*ector &ereyra',' ','2!4034'58!',!'0); insert into e pleados values ('30000222','-uis -#9ue',' ','254034'510',600); insert into e pleados values ('20!!!444','-aura :orres','f','224'24'58!',400); insert into e pleados values ('30000234',')lberto 7oto',' ', ''04'04'515',420); insert into e pleados values ('20'2!461',')na ;o e3','f','2'4054'568',3!0); insert into e pleados values ('24'!4285','<felia ;arcia','f',''240!4'564',350); insert into e pleados values ('304'!428','<scar :orres',' ','0240!4'561',400);

DY (s pol%tica de la empresa festejar cada fin de mes, los cumplea^os de todos los empleados que cumplen ese mes# Si los empleados son de se o femenino, se les regala un ramo de rosas, si son de se o masculino, una corbata# La secretaria de la ?erencia necesita saber cu+ntos ramos de rosas y cu+ntas corbatas debe comprar para el mes de mayo#

2.23. Ejercicio 3
3tili)ando la Base de Datos de 8ecetas @btener los "inos con grado de alco!ol entre 10 y 20, o todos si no e iste ninguno con este rango# 8epetir el ejercicio con rango entre ,0 y D0# *omparar los resultados#

2.24. Ejercicio 4
3tili)ando la Base de Datos de 8ecetas' =ientras el tiempo medio de las recetas sea inferior a F0, aumentar el tiempo de las recetas con incrementos de 4 !asta que el precio mayor no llegue a 400, pero se acerque el m+ imo posible# 7l final de la ejecucin "isuali)ar el resultado, pero no guardar los cambios !ec!os a la base de datos# (jecutar tambi.n con el tiempo medio de las recetas inferior a F00#

22 de 20

Das könnte Ihnen auch gefallen