Sie sind auf Seite 1von 19

2.

SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

Pgina | 1

FUNCIONES EN TRANSACT SQL


SQL Server proporciona al usuario la posibilidad de definir sus propias funciones, conocidas como UDF (User Defined Functions). Existen tres tipos de funciones. Estas son: Funciones escalares. Funciones en lnea. Funciones en lnea de mltiples sentencias.

Funciones escalares Las funciones escalares devuelven un nico valor de cualquier tipo de los datos tal como int, money, varchar, real, etc. La sintaxis para una funcin escalar es la siguiente: CREATE FUNCTION <Scalar_Function_Name, sysname, FunctionName> ( -- Lista de parmetros <@Param1, sysname, @p1> <Data_Type_For_Param1, , int>, ... ) -- Tipo de datos que devuelve la funcin. RETURNS <Function_Data_Type, ,int> AS BEGIN ... END El siguiente ejemplo muestra cmo crear una funcin escalar. USE AUTO_ESCUELA /* Mostrar los nombres de los alumnos que tiene clases teoricas con el instructor x */ create function Alu_ins (@cod_ins varchar(5)) returns varchar(15) as begin declare @nombre varchar(15); select @nombre=a.nom_alu from alumno a INNER JOIN clases_teoricas ct ON (a.mat_alu=ct.cod_alu ) INNER JOIN instructor i ON (ct.cod_ins=i.cod_ins ) return @nombre end /* Alu_ins */ Pueden ser utilizadas en cualquier sentencia Transact SQL. Un aspecto a tener en cuenta, es que para utilizar una funcin escalar debemos identificar el nombre de la funcin con el propietario de la misma. El siguiente ejemplo muestra cmo utilizar la funcin anteriormente creada en una sentencia Transact SQL. Un aspecto muy a tener en cuenta es que la funcin ejecutar sus sentencias SELECT una vez por cada fila del conjunto de resultados devuelto por la consulta SELECT principal. --ejecutar SELECT -- Ejecucion de la funcion: distinct (dbo.Alu_ins ('I-001')) nombre FROM Alumno -- o print dbo.Alu_ins ('I-001')

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

Pgina | 2

Las funciones escalares son muy similares a procedimientos almacenados con parmetros de salida, pero estas pueden ser utilizadas en consultas de seleccion y en la clausula where de las mismas. Las funciones no pueden ejecutar sentencias INSERT o UPDATE. Funciones en lnea Las funciones en lnea son las funciones que devuelven un conjunto de resultados correspondientes a la ejecucin de una sentencia SELECT. La sintaxis para una funcin de tabla en lnea es la siguiente:

CREATE FUNCTION <Inline_Function_Name, sysname, FunctionName> ( -- Lista de parmetros <@param1, sysname, @p1> <Data_Type_For_Param1, , int>,... ) RETURNS TABLE AS RETURN ( -- Sentencia Transact SQL ) El siguiente ejemplo muestra cmo crear una funcin en lnea. /* MOSTRAR LA DIRECCION DE LA AULA DONDE PASO CLASES EL ESTUDIANTE X */ drop function ALUMNO_INSTRUCTOR /*PARA ELIMINAR LA FUNCION*/ CREATE FUNCTION ALUMNO_INSTRUCTOR(@codalu VARCHAR(20))RETURNS TABLE AS RETURN ( SELECT c.dir_aul FROM Alumno a INNER JOIN clases_teoricas ct ON (a.mat_alu=ct.cod_alu ) INNER JOIN aula c ON (ct.cod_aul=c.num_aul ) where a.mat_alu=@codalu ) /* EJECUTAR */ select * from alumno select * from instructor select * from dbo.ALUMNO_INSTRUCTOR('CFR-24212') No podemos utilizar la clausula ORDER BY en la sentencia de una funcin el lnea. Las funciones en lnea pueden utilizarse dentro de joins o querys como si fueran una tabla normal. FUNCIONES EN LNEA DE MLTIPLES SENTENCIAS Las funciones en lnea de mltiples sentencias son similares a las funciones en lnea excepto que el conjunto de resultados que devuelven puede estar compuesto por la ejecucin de varios consultas SELECT. Este tipo de funcin se usa en situaciones donde se requiere una mayor lgica de proceso. La sintaxis para una funcin es de tabla de multi sentencias es la siguiente:

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

Pgina | 3

CREATE FUNCTION <Table_Function_Name, sysname, FunctionName> ( -- Lista de parmetros <@param1, sysname, @p1> <data_type_for_param1, , int>, ... ) RETURNS -- variable de tipo tabla y su estructura <@Table_Variable_Name, sysname, @Table_Var> TABLE ( <Column_1, sysname, c1> <Data_Type_For_Column1, , int>, <Column_2, sysname, c2> <Data_Type_For_Column2, , int> ) AS BEGIN -- Sentencias que cargan de datos la tabla declarada RETURN END Posteriormente se ver ejemplos.

VISTAS
Una vista puede mostrar toda la informacin de una tabla o de la integracin de informacin de ms de una tabla. Es decir se puede afirmar que las vistas trabajan como especie de filtros de las tablas subyacentes que brindan la informacin presentada por la vista. Entre las principales ventajas del empleo de las vistas podemos mencionar: - Permite mostrar un subconjunto de filas y/o columnas de una tabla. - Permite mostrar informacin de ms de una tabla. - Permite realizar uniones entre dos o ms tablas. - Permite mostrar informes resumen. - Puede definirse a partir de otras vistas Antes de crear una vista, considere estas indicaciones: Slo puede crear vistas en la base de datos actual. Sin embargo, las tablas y las vistas a las que se haga referencia desde la nueva vista pueden encontrarse en otras bases de datos e, incluso, en otros servidores, si la vista se define mediante consultas distribuidas. - Los nombres de las vistas deben seguir las reglas para los identificadores y ser nicos para cada usuario. Adems, el nombre debe ser distinto del de cualquier tabla de las que el usuario sea propietario. - Puede generar vistas dentro de otras vistas y en procedimientos que hagan referencia a vistas. Microsoft SQL Server permite anidar hasta 32 niveles de vistas. - No puede asociar reglas, definiciones DEFAULT ni desencadenadores con las vistas. - La consulta que defina a la vista no puede incluir las clusulas ORDER BY, COMPUTE o COMPUTE BY, ni la palabra clave INTO. - No puede generar ndices ni crear definiciones de ndices de texto en las vistas. - No puede crear vistas temporales, ni vistas dentro de tablas temporales. - No puede emitir consultas de texto en una vista, aunque una definicin de vista puede incluir una consulta de texto si sta hace referencia a una tabla configurada para indizacin de texto. Debe especificar el nombre de todas las columnas de la vista en el caso de que: i) Alguna de las columnas de la vista derive de una expresin aritmtica, una funcin integrada o una constante. -

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

Pgina | 4

ii) iii)

Dos o ms columnas de la vista tendran, en caso contrario, el mismo nombre (normalmente, debido a que la definicin de la vista incluye una combinacin y las columnas de dos o ms tablas diferentes tienen el mismo nombre). Desee darle a una columna de la vista un nombre distinto del de la columna de la que deriva. (Tambin puede cambiar el nombre de las columnas en la vista). Una columna de una vista hereda los tipos de datos de la columna de la que deriva, aunque no cambie su nombre.

Creacion de vistas (T-SQL) Crea una tabla virtual que representa los datos de una o ms tablas de una forma alternativa. Las vistas se pueden utilizar como mecanismos de seguridad al conceder permisos sobre una vista, pero no sobre las tablas subyacentes (base). Sintaxis CREATE VIEW nombreVista [(columna [,n])] [WITH ENCRYPTION] AS instruccinSeleccin [WITH CHECK OPTION] o Drop view vista CREATE VIEW Crea una tabla virtual que representa los datos de una o ms tablas de una forma alternativa. CREATE VIEW debe ser la primera instruccin en una secuencia de consultas. /* MOSTRAR LOS ALUMNOS Y LA SUMA TOTAL DEL PUNTAJE QUE OBTUVO EN CLASES */ DROP VIEW ALU_NOTA CREATE VIEW ALU_NOTA AS SELECT a.NOM_ALU nombre,((cp.PUN_PRA+ct.PUN_CLA)/2) nota FROM ALUMNO a INNER JOIN CLASES_PRACTICAS cp ON (a.mat_alu=cp.cod_alu) INNER JOIN CLASES_TEORICAS ct ON (a.mat_alu=ct.cod_alu) Utilizar funciones integradas en una vista /* MOSTRAR LA CANTIDAD DE ALUMNOS Y LOS PROMEDIOS CORRESPONDIENTES */ CREATE VIEW Resumen AS Select Count(a.mat_alu) As Alumnado, Max((cp.PUN_PRA+ct.PUN_CLA)/2) As MayorPromedio, Min((cp.PUN_PRA+ct.PUN_CLA)/2) As MenorPromedio, Avg((cp.PUN_PRA+ct.PUN_CLA)/2) As PromedioSec, Sum(cp.PUN_PRA) As AcumuladoPracticas, Sum(ct.PUN_CLA) As AcumuladoClases From alumno a INNER JOIN CLASES_PRACTICAS cp ON (a.mat_alu=cp.cod_alu) INNER JOIN CLASES_TEORICAS ct ON (a.mat_alu=ct.cod_alu) Group by a.sex_alu DROP VIEW para eliminar vistas ALTER VIEW para modificar vistas

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

Pgina | 5

USE AUTO_ESCUELA /*FUNCIONES ESCALARES*/ /* E1. CALCULAR EL FACTORIAL DE UN NUMERO X */ drop function factorial_x /*PARA ELIMINAR LA FUNCION*/ create function factorial_x(@x integer) returns integer as begin declare @i integer, @p integer set @i=1 set @p=1 while(@i<=@x) begin set @p=@p*@i set @i=@i+1 end return @p end /* Ejecutar */ print 'El factorial es: '+ cast(dbo.factorial_x(3) as varchar) /* o*/ select dbo.factorial_x(3) as Factorial /*E2. MOSTRAR LOS NOMBRES DE LOS ALUMNOS QUE TIENEN CLASES TEORICAS CON EL INSTRUCTOR x */ drop function Alu_ins /*PARA ELIMINAR LA FUNCION*/ create function Alu_ins (@cod_ins varchar(5)) returns varchar(15) as begin declare @nombre varchar(15); select @nombre=a.nom_alu from alumno a INNER JOIN clases_teoricas ct ON (a.mat_alu=ct.cod_alu ) INNER JOIN instructor i ON (ct.cod_ins=i.cod_ins ) where i.cod_ins=@cod_ins return @nombre end /* Alu_ins */ /* EJECUTAR */ SELECT -- Ejecucion de la funcion: distinct (dbo.Alu_ins ('I-001')) nombre FROM Alumno /* O */ print 'El estudiante que recibe instruccion es: '+ cast(dbo.Alu_ins('I-001') as varchar) /*E3 MOSTRAR LAS EDADES DE CADA ESTUDIANTE */ SELECT GETDATE() drop function EDAD_ALU /*PARA ELIMINAR LA FUNCION*/

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

Pgina | 6

create function EDAD_ALU( @F datetime) returns int as begin declare @anhos int set @anhos= datediff(yy,@F,getdate())/*La funcin DATEDIFF calcula fecha2 -fecha1 en partes de fecha.*/ return @anhos end /* EJECUTAR */ select * from ALUMNO select "Nombre y Apellidos" = RTRIM(a.NOM_ALU)+' '+RTRIM(a.PAT_ALU)+' '+a.MAL_ALU,dbo.EDAD_ALU(a.FEN_ALU) Edad from ALUMNO a /*FUNCIONES EN LINEA*/ /*E4. MOSTRAR LA DIRECCION DE LA AULA DONDE PASO CLASES EL ESTUDIANTE X */ drop function ALUMNO_INSTRUCTOR /*PARA ELIMINAR LA FUNCION*/ CREATE FUNCTION ALUMNO_INSTRUCTOR(@codalu VARCHAR(20))RETURNS TABLE AS RETURN ( SELECT c.dir_aul FROM Alumno a INNER JOIN clases_teoricas ct ON (a.mat_alu=ct.cod_alu ) INNER JOIN aula c ON (ct.cod_aul=c.num_aul ) where a.mat_alu=@codalu ) /* EJECUTAR */ select * from alumno select * from dbo.ALUMNO_INSTRUCTOR('CFR-24212') /* E5. MOSTRAR UN REPORTE QUE DADO EL NOMBRE DEL ALUMNO MUESTRE EL PUNTAJE OBTENIDO EN LA CLASE PRACTICA Y EL MOVIL QUE UTILIZO*/ DROP FUNCTION ALU_CLAPRA_MOV CREATE FUNCTION ALU_CLAPRA_MOV(@codalu VARCHAR(20)) RETURNS TABLE /*(PUN_PRA INTEGER,PLA_MOV VARCHAR(10))*/ AS RETURN ( SELECT cp.PUN_PRA,m.MAR_MOV From Alumno a INNER JOIN clases_practicas cp On a.mat_alu = cp.cod_alu INNER JOIN movil m On cp.cod_mov = m.pla_mov where a.mat_alu=@codalu ) /* EJECUTAR */ select * from alumno select * from clases_practicas select * from movil select * from dbo.ALU_CLAPRA_MOV('CFR-24212') USE AUTO_ESCUELA GO /* ...........VISTAS............ */

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

Pgina | 7

/* E6. MOSTRAR LOS ALUMNOS Y LA SUMA TOTAL DEL PUNTAJE QUE OBTUVO EN CLASES */ DROP VIEW ALU_NOTA CREATE VIEW ALU_NOTA AS SELECT a.NOM_ALU nombre,((cp.PUN_PRA+ct.PUN_CLA)/2) nota FROM ALUMNO a INNER JOIN CLASES_PRACTICAS cp ON (a.mat_alu=cp.cod_alu) INNER JOIN CLASES_TEORICAS ct ON (a.mat_alu=ct.cod_alu) /* EJECUTAR */ SELECT * FROM alumno SELECT * FROM clases_practicas SELECT * FROM clases_teoricas SELECT * FROM ALU_NOTA /* E7. MOSTRAR LA CANTIDAD DE ALUMNOS Y LOS PROMEDIOS CORRESPONDIENTES */ DROP VIEW Resumen CREATE VIEW Resumen AS Select Count(a.mat_alu) As Alumnado, Max((cp.PUN_PRA+ct.PUN_CLA)/2) As MayorPromedio, Min((cp.PUN_PRA+ct.PUN_CLA)/2) As MenorPromedio, Avg((cp.PUN_PRA+ct.PUN_CLA)/2) As PromedioSec, Sum(cp.PUN_PRA) As AcumuladoPracticas, Sum(ct.PUN_CLA) As AcumuladoClases From alumno a INNER JOIN CLASES_PRACTICAS cp ON (a.mat_alu=cp.cod_alu) INNER JOIN CLASES_TEORICAS ct ON (a.mat_alu=ct.cod_alu) Group by a.sex_alu /* EJECUTAR */ SELECT * FROM alumno SELECT * FROM clases_practicas SELECT * FROM clases_teoricas SELECT * FROM Resumen /*E8. MOSTRAR A TODOS LOS ALUMNOS APROBADOS CUYO NOMBRE COMIENZA CON 'R' */ DROP VIEW ALU_APRO CREATE VIEW ALU_APRO AS SELECT a.Nom_Alu FROM Alumno a INNER JOIN CLASES_PRACTICAS cp ON (a.mat_alu=cp.cod_alu) INNER JOIN CLASES_TEORICAS ct ON (a.mat_alu=ct.cod_alu) WHERE a.Nom_Alu LIKE 'R%' and ((cp.PUN_PRA+ct.PUN_CLA)/2)>=51 /* EJECUTAR */ SELECT * FROM alumno SELECT * FROM clases_practicas SELECT * FROM clases_teoricas SELECT * FROM ALU_APRO

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOSCree la siguiente base de datos

Lic. Julia Zenteno Z.

Pgina | 8

1.

PRACTICA 4
NOT1 int, NOT2 int, NOT3 int, primary Key (CODALU,CODESP), Foreign Key (CODALU,CODESP) references INSCRITO, );

create DATABASE MATRICULA USE MATRICULA CREATE TABLE ALUMNO ( COD varchar(5) not null, NOM varchar (10), MAT varchar(10), PAT varchar(10), primary key(COD) ); create TABLE CATEGORIA ( CODCAT varchar(5) not null , PAGHRS int, primary Key (CODCAT) ); CREATE TABLE PROFESOR ( CODPRO varchar(5)not null , NOM varchar(10), PAT varchar(15), MAT varchar(15), CODCAT varchar(5), FECING datetime, /* fecha de ingreso*/ DIR varchar(30), TEL varchar(9), constraint pk_planillames primary key (anio,mes,deptno) primary Key(CODPRO), Foreign Key (CODCAT) references CATEGORIA ); CREATE TABLE ESPECIALIDAD ( CODESP varchar(5) not null , CODPRO varchar(5), DESCRI varchar (15), FECINI datetime, /* fecha de inicio */ PEN int, /* pension */ VAC int, /* vacantes */ NUMHRS int, /* numero de horas */ primary Key (CODESP), Foreign Key (CODPRO) references PROFESOR ); create table INSCRITO ( CODALU varchar(5) not null, CODESP varchar(5) not null, Primary Key (CODALU, CODESP), foreign key (CODALU) references ALUMNO, Foreign Key (CODESP) references ESPECIALIDAD ); create TABLE CALIFICACION ( CODALU varchar(5) not null, CODESP varchar(5) not null,

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

Pgina | 9

insert into ALUMNO VALUES('A0001','VERONICA','LINARES','SALINAS'); insert into ALUMNO VALUES('A0002 ','MARIA','LLANOS','RIOS'); insert into ALUMNO VALUES('A0003','RICARDO','ORTIZ', 'CORTES'); insert into ALUMNO VALUES('A0004','FREDDY','ALANOCA','PADILLA'); insert into ALUMNO VALUES('A0005','ROGELIO','ARCE','TORREZ'); insert into ALUMNO VALUES('A0006', 'NANCY', 'BUTRON','POMA'); SELECT * FROM ALUMNO insert into CATEGORIA VALUES('C0001',72); insert into CATEGORIA VALUES('C0002',88); insert into CATEGORIA VALUES('C0003',72); insert into CATEGORIA VALUES('C0004',100); insert into CATEGORIA VALUES('C0005',96); SELECT * FROM CATEGORIA insert into PROFESOR VALUES('P0001','J0SE','RAMOS','PARD0','C0001','03-03-2009','6 DE AGOST0 N1111','123456789'); insert into PROFESOR VALUES('P0002','MARCELO','POMA','PAREDEZ','C0002','03-03-2009','6 DE MARZO N101','123456788'); insert into PROFESOR VALUES('P0003','SANDRA','MOLLERICON','NENDEZ','C0001','02-04-2009','DIAZ ROMERO N207','123456787'); insert into PROFESOR VALUES('P0004','OMAR','PEREZ','ARMAYO','C0003','02-04-2009','UYUSTUS N300','123456786'); insert into PROFESOR VALUES('P0005','LUIS','SANCHEZ','MENDOZA','C0005','10-04-2009','PANDO N202','123456785'); SELECT * FROM PROFESOR insert into ESPECIALIDAD VALUES('E0001','P0001','oracle','04-03-2009 16:00',70,5,72); insert into ESPECIALIDAD VALUES('E0002','P0003','visual basic','04-04-2009 16:00',50,5,40); insert into ESPECIALIDAD VALUES('E0003','P0002','sql server','04-04-2009 16:00',70,2,40); insert into ESPECIALIDAD VALUES('E0004','P0003','java','04-04-2009 16:00',150,5,120); insert into ESPECIALIDAD VALUES('E0005','P0004','linux','04-04-2009 16:00',70,4,40); SELECT * FROM ESPECIALIDAD insert into INSCRITO VALUES('A0001','E0002'); ESPECIALIDAD CATEGORIA insert into INSCRITO VALUES('A0002','E0002'); insert into INSCRITO VALUES('A0001','E0001'); insert into INSCRITO VALUES('A0003','E0002'); insert into INSCRITO VALUES('A0004','E0002'); PROFESOR SELECT * FROM INSCRITO insert into CALIFICACION VALUES('A0002','E0002',50,60,70); insert into CALIFICACION VALUES('A0001','E0001',55,80,75); INSCRITO insert into CALIFICACION VALUES('A0003','E0002',30,64,55); CALIFICACION insert into CALIFICACION VALUES('A0004','E0002',55,54,57); insert into CALIFICACION VALUES('A0001','E0002',90,65,77); ALUMNO SELECT * FROM CALIFICACION
CODESP

CODCAT PAGHRS

CODPRO FECINI PEN

VAC

NUMHRS DESCRI

CODPRO NOM PAT

MAT

CODALU CODESP

CODCAT FECING DIR TEL

CODALU CODESP NOT1 NOT2 NOT3

COD

NOM MAT PAT

2. Genere el siguiente diagrama de base de datos

3. Realice las siguientes consultas a) Mostrar la lista de alumnos de la especialidad E0002 ordenados alfabticamente b) Mostrar un reporte que muestre el cdigo del alumno, el curso que estudia y el c) Mostrar todos los alumnos con indicacin de los cursos que estudian con indicacin de sus promedios en caso tenerlo. d) Mostrar el promedio general de los alumnos que completaron tres cursos e) Mostrar el nmero de alumnos que estudia en cada especialidad f) Mostrar a los alumnos cuyo promedio es mayor que 14, indique especialidad, curso y profesor 1. Cree las siguientes funciones a) Que muestre el promedio de cada alumno de acuerdo a la especialidad indicada como parmetro de entrada. b) Mostrar los profesores que tuvo el estudiante x. c) Mostrar la lista de alumnos de la especialidad E0002 ordenados alfabticamente d) Dado un numero verificar si es par o impar 2. Cree vistas para todos los ndices del inciso 3.

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

P g i n a | 10

PROCEDIMIENTOS ALMACENADOS
Un stored procedure es una coleccin de sentencias del Transact-SQL las cuales organizadas lgicamente resuelven algunas de las operaciones transaccionales que requieren los usuarios, estos procedimientos se almacenan en la base de datos. Los procedimientos almacenados soportan el empleo de variables declaradas por el usuario, sentencias para toma de decisiones entre otras caractersticas. En SQL Server existen 5 tipos de procedimientos almacenados: Procedimientos del sistema, son los que se encuentran almacenados en la base de datos master y algunas en las bases de datos de usuario, estos procedimientos almacenados brindan informacin acerca de los datos y caractersticas del servidor. En el nombre usan como prefijo sp_. Procedimientos locales, son los procedimientos almacenados en una base de datos. Procedimientos temporales, son procedimientos locales y sus nombres empiezan con los prefijos # o ##, dependiendo si se desea que sea un procedimiento global a todas las conexiones o local a la conexin que lo define. Procedimientos remotos, son procedimientos almacenados en servidores distribuidos. Procedimientos extendidos, son aquellos que nos permiten aprovechar las funcionalidades de otras libreras externas a SQL Server. Estos procedimientos usan el prefijo xp_ y se encuentran en la base de datos master.

Entre las principales caractersticas de un procedimiento almacenado podemos mencionar: Aceptar parmetros de entrada y devolver varios valores en forma de parmetros de salida al lote o al procedimiento que realiza la llamada. Contener instrucciones de programacin que realicen operaciones en la base de datos, incluidas las llamadas a otros procedimientos. Devolver un valor de estado que indica si la operacin se ha realizado correctamente o habido un error (y el motivo del mismo). Permiten una ejecucin ms rpida, ya que los procedimientos son analizados y optimizados en el momento de su creacin, y es posible utilizar una versin del procedimiento que se encuentra en la memoria despus de que se ejecute por primera vez. Pueden reducir el trfico de red. Pueden utilizarse como mecanismo de seguridad, ya que se puede conceder permisos a los usuarios para ejecutar un procedimiento almacenado, incluso si no cuentan con permiso para ejecutar directamente las instrucciones del procedimiento.

Cree los procedimientos con la sentencia CREATE PROCEDURE. CREATE PROC[EDURE] <Nombre Procedimiento> [ {@parmetro tipoDatos} [= predeterminado] [OUTPUT] ] [,...n] [WITH { RECOMPILE | ENCRYPTION } ] AS Sentencias SQL [...n]

Argumentos

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

P g i n a | 11

@parmetro El usuario puede tener hasta mximo de 1024 parmetros. El nombre del parmetro debe comenzar con un signo (@) . Los parmetros son locales al procedimiento. default Es un valor predeterminado para el parmetro. OUTPUT Indica que se trata de un parmetro de salida. El valor de esta opcin puede devolverse a EXEC[UTE]. Utilice los parmetros OUTPUT para devolver informacin al procedimiento que llama. Los parmetros de texto no se pueden utilizar como parmetros OUTPUT. {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION} RECOMPILE indica que SQL Server no almacena en la cach un plan para este procedimiento, con lo que el procedimiento se vuelve a compilar cada vez que se ejecuta. Utilice la opcin RECOMPILE cuando emplee valores atpicos o temporales para no anular el plan de ejecucin que est almacenado en la memoria cach. ENCRYPTION indica que SQL Server codifica la entrada de la tabla syscomments que contiene el texto de la instruccin CREATE PROCEDURE. Entre otras observaciones podemos mencionar: El tamao mximo de un procedimiento es de 128 Mb. Un procedimiento slo puede crearse en la base de datos actual. Se puede crear otros objetos de base de datos dentro de un procedimiento almacenado. Puede hacer referencia a un objeto creado en el mismo procedimiento almacenado, siempre que se cree antes de que se haga referencia al objeto. Puede hacer referencia a tablas temporales dentro de un procedimiento almacenado.

Si crea una tabla temporal privada dentro de un procedimiento almacenado, la tabla temporal existir nicamente para los fines del procedimiento; desaparecer cuando ste finalice. Si ejecuta un procedimiento almacenado que llama a otro procedimiento almacenado, el procedimiento al que se llama puede tener acceso a todos los objetos creados por el primer procedimiento, incluidas las tablas temporales. Si se ejecuta un procedimiento almacenado remoto que realiza cambios en un servidor SQL Server remoto, los cambios no se podrn deshacer. Los procedimientos almacenados remotos no intervienen en las transacciones. Las siguientes instrucciones no se pueden emplear dentro de un procedimiento. CREATE VIEW CREATE DEFAULT CREATE TRIGGER CREATE ROLES Existen diferentes formas de utilizar los procedimientos almacenados, como los que se mencionan a continuacin: A. Utilizar un procedimiento sencillo con una instruccin SELECT compleja Este procedimiento almacenado devuelve todos los alumnos (nombre y apellidos), instructores y los mviles que utilizo a partir de una combinacin de cuatro tablas. Este procedimiento almacenado no utiliza ningn parmetro. /*E1. ESTE PROCEDIMIENTO ALMACENADO DEVUELVE TODOS LOS ALUMNOS (NOMBRE Y APELLIDOS), INSTRUCTORES Y LOS MVILES QUE UTILIZO A PARTIR DE UNA COMBINACIN DE CUATRO TABLAS.ESTE PROCEDIMIENTO ALMACENADO NO UTILIZA NINGN PARMETRO.*/ USE AUTO_ESCUELA IF EXISTS (SELECT name FROM sysobjects WHERE name = 'alu_ins_mov' AND type = 'P') DROP PROCEDURE alu_ins_mov

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

P g i n a | 12

GO CREATE PROCEDURE alu_ins_mov AS SELECT "Alumnos"=RTRIM(a.NOM_ALU)+' '+RTRIM(a.PAT_ALU)+' '+a.MAL_ALU, "Instructores"= RTRIM(i.NOM_INS)+' '+RTRIM(i.PAT_INS)+' '+i.MAT_INS, "Vehiculo"=m.MAR_MOV FROM ALUMNO a INNER JOIN CLASES_PRACTICAS cp ON (a.mat_alu=cp.cod_alu) INNER JOIN INSTRUCTOR i ON (cp.cod_ins=i.cod_ins) INNER JOIN MOVIL m ON (cp.cod_mov=m.pla_mov) El procedimiento almacenado alu_ins_mov se puede ejecutar de estas formas: EXECUTE alu_ins_mov -- Or EXEC alu_ins_mov B. Utilizar un procedimiento sencillo con parmetros Este procedimiento almacenado devuelve todos los alumnos (nombre y apellidos), instructores y los mviles que utilizo a partir de una combinacin de cuatro tablas. Este procedimiento almacenado acepta coincidencias exactas de los parmetros pasados. /* E2. ESTE PROCEDIMIENTO ALMACENADO DEVUELVE TODOS LOS ALUMNOS (NOMBRE Y APELLIDOS),INSTRUCTORES Y LOS MVILES QUE UTILIZO A PARTIR DE UNA COMBINACIN DE CUATRO TABLAS. ESTE PROCEDIMIENTO ALMACENADO ACEPTA COINCIDENCIAS EXACTAS DE LOS PARMETROS PASADOS DE NOMBRE Y APELLIDO DEL ALUMNO.*/ USE AUTO_ESCUELA IF EXISTS (SELECT name FROM sysobjects WHERE name = 'alu_ins_movP' AND type = 'P') DROP PROCEDURE alu_ins_movP GO CREATE PROCEDURE alu_ins_movP @nomalu VARCHAR (15), @patalu VARCHAR (15), @malalu VARCHAR (15) AS SELECT "Alumnos"=RTRIM(a.NOM_ALU)+' '+RTRIM(a.PAT_ALU)+' '+a.MAL_ALU, "Instructores"= RTRIM(i.NOM_INS)+' '+RTRIM(i.PAT_INS)+' '+i.MAT_INS, "Vehiculo"=m.MAR_MOV FROM ALUMNO a INNER JOIN CLASES_PRACTICAS cp ON (a.mat_alu=cp.cod_alu) INNER JOIN INSTRUCTOR i ON (cp.cod_ins=i.cod_ins) INNER JOIN MOVIL m ON (cp.cod_mov=m.pla_mov) WHERE a.NOM_ALU=@nomalu and a.PAT_ALU=@patalu and a.MAL_ALU=@malalu El procedimiento almacenado alu_ins_movP se puede ejecutar de estas formas: EXECUTE alu_ins_movP 'Rosalia','Conde','Flores' -- Or EXEC alu_ins_movP 'Rosalia','Conde','Flores'
/* E3.INSERTAR UN REGISTRO EN LA TABLA ALUMNO COMPROBANDO VALORES NULOS */

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

P g i n a | 13

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'ingreso_ALU' AND type = 'P') DROP PROCEDURE ingreso_ALU GO -- PARA MODIFICAR ALTER PROCEDURE ingreso_ALU CREATE PROCEDURE ingreso_ALU @apellido varchar(15), @nombre varchar(15) AS IF((@nombre='') OR (@apellido='')) BEGIN PRINT 'NO SE PUEDEN INGRESAR VALORES NULOS' RETURN END ELSE BEGIN --INSERT INTO ALUMNO (NOM_ALU,PAT_ALU) VALUES (@nombre,@apellido) PRINT 'REGISTRO SE HA INGRESADO CORRECTAMENTE'RETURN END --EJECUTAR EXECUTE ingreso_ALU 'A','B' -- Or EXEC ingreso_ALU '','' /*RETURN provoca la salida del procedimiento tras enviar un mensaje a la pantalla del usuario.*/ /* E4. INSERTAR UN REGISTRO EN LA TABLA ALUMNO COMPROBANDO VALORES NULOS Y SI LOS DATOS YA ESTAN REGISTRADOS */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'ingreso_ALU1' AND type = 'P') DROP PROCEDURE ingreso_ALU1 GO CREATE PROCEDURE ingreso_ALU1 @matalu varchar(15) AS DECLARE @mat varchar(15) --variable local IF(@matalu<>'') BEGIN --guardamos la matricula en la variable local @mat SELECT @mat=a.MAT_ALU FROM ALUMNO a WHERE a.MAT_ALU=@matalu IF(@mat=@matalu) BEGIN PRINT 'EL USUARIO YA EXISTE EN LA BASE DE DATOS' RETURN END ELSE BEGIN --INSERT INTO ALUMNO (MAT_ALU) VALUES (@matalu) PRINT 'EL REGISTRO SE HA INGRESADO CORRECTAMENTE' END END ELSE BEGIN PRINT 'NO SE PUEDEN INGRESAR VALORES NULOS' RETURN END --EJECUTAR EXECUTE ingreso_ALU1 'CFR-24212' -- Or EXECUTE ingreso_ALU1 'CFR-24'

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

P g i n a | 14

-- Or EXEC ingreso_ALU1 '' /* E5. CREAR UN PROCEDIMIENTO PARA ADICIONAR ALUMNOS DENTRO DE UN BLOQUE TRY CATCH CONTROLADO POR UNA TRANSACCION */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'ADD_ALU' AND type = 'P') DROP PROCEDURE ADD_ALU GO CREATE PROCEDURE ADD_ALU @apellido varchar(15), @nombre varchar(15) AS BEGIN TRY BEGIN TRAN PRINT 'SE INSERTARA LOS DATOS' --INSERT INTO ALUMNO (NOM_ALU,PAT_ALU) VALUES (@nombre,@apellido) COMMIT END TRY BEGIN CATCH ROLLBACK PRINT ERROR_MESSAGE() END CATCH --EJECUTAR EXECUTE ADD_ALU 'Rosalia','Conde' /* E6. CREAR UN PROCEDIMIENTO ALMACENADO QUE PERMITA INSERTAR O ADICIONAR UN ALUMNO A TODAS LAS TABLAS QUE SE RELACIONA */ CREATE PROCEDURE Adi_Mod @matalu VARCHAR(15), @cidalu VARCHAR (9), @nomalu VARCHAR (15), @patalu VARCHAR (15), @malalu VARCHAR (15), @fenalu DATETIME, @sexalu VARCHAR (2), @diralu VARCHAR (15) AS DECLARE @X CHAR(2) IF EXISTS ( SELECT a.MAT_ALU FROM ALUMNO a WHERE a.MAT_ALU=@matalu) PRINT ' El alumno ya est inscrito' ELSE BEGIN INSERT INTO ALUMNO VALUES (@matalu,@cidalu,@nomalu,@patalu,@malalu,@fenalu,@sexalu,@diralu) INSERT INTO CUOTA_ALUMNO VALUES ('P-02',@matalu,'02/03/09') INSERT INTO CLASES_PRACTICAS VALUES ('102-JCN','28/03/09','16:30',@matalu,'P-02','I-002',90,'0 KM','30 KM','PRACTICAS') INSERT INTO CLASES_TEORICAS VALUES ('02',@matalu,'28/03/09','16:30','I-002','P-02',50) PRINT ' Se inscribi al alumno' END -- Para ejecutar Exec Adi_Mod 'PLA-23212','2445678LP','Adrian','Perez','Llanos','10/05/1990','M','C/ Arce N1243'

Si queremos que los parmetros de un procedimiento almacenado sean de entrada-salida debemos especificarlo a travs de la palabra clave OUTPUT , tanto en la definicin del procedure como en la ejecucin. El siguiente ejemplo muestra la definicin de un procedimiento con parmetros de salida.

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

P g i n a | 15

/* PROCEDIMIENTO DE ENTRADA Y SALIDA*/ CREATE PROCEDURE ALU_DIRECCION @matalu varchar(15), @diralu varchar(15) output AS BEGIN SELECT @diralu=a.DIR_ALU FROM ALUMNO a WHERE a.MAT_ALU=@matalu END --Para ejecutar este procedimiento DECLARE @matalu varchar(15) DECLARE @diralu varchar(15) SET @matalu = 'PCS-23212' EXEC ALU_DIRECCION @matalu, @diralu output PRINT 'La direccion del alumno ' + CAST (@matalu AS varchar)+ ' es: '+ CAST (@diralu AS varchar)

TRANSACCIONES (TRANSACTIONS)
Una transaccin es un conjunto de operaciones Transact SQL que se ejecutan como un nico bloque, es decir, si falla una operacin Transact SQL fallan todas. Si una transaccin tiene xito, todas las modificaciones de los datos realizadas durante la transaccin se confirman y se convierten en una parte permanente de la base de datos. Si una transaccin encuentra errores y debe cancelarse o revertirse, se borran todas las modificaciones de los datos. El ejemplo clsico de transaccin es una transferencia bancaria, en la que quitamos saldo a una cuenta y lo aadimos en otra. Si no somos capaces de abonar el dinero en la cuenta de destino, no debemos quitarlo de la cuenta de origen. SQL Server funciona por defecto con Transacciones de confirmacin automtica , es decir, cada instruccin individual es una transaccin y se confirma automticamente. Las transacciones se realizan o no. Nunca se deja la base de datos en un estado inconsistente. Estas transacciones deben cumplir 4 propiedades fundamentales comnmente conocidas como ACID (atomicidad, coherencia, asilamiento y durabilidad). El criterio ACID se aplica a cada transaccin: - Atomicity (atmico) Los cambios se realizan o no se realizan. - Consistency (consistente) La base de datos ha de mantener su integridad - Isolation (aislamiento) Independencia respecto a otras transacciones - Durability (permanente) Los resultados de la transaccin completada deben ser permanentes. Transacciones implicitas y explicitas Para agrupar varias sentencias Transact SQL en una nica transaccin, disponemos de los siguientes mtodos: Transacciones explcitas Cada transaccin se inicia explcitamente con la instruccin BEGIN TRANSACTION y se termina explcitamente con una instruccin COMMIT o ROLLBACK. Transacciones implcitas Se inicia automticamente una nueva transaccin cuando se ejecuta una instruccin que realiza modificaciones en los datos: SELECT, INSERT, UPDATE, DELETE ALTER TABLE TRUNCATE TABLE

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

P g i n a | 16

OPEN, FETCH GRANT, REVOKE Cada transaccin se completa explcitamente con una instruccin COMMIT o ROLLBACK. Para activar-desactivar el modo de transacciones implcitas debemos ejecutar la siguiente instruccin. --Activamos el modo de transacciones implicitas SET IMPLICIT_TRANSACTIONS ON --Desactivamos el modo de transacciones implicitas SET IMPLICIT_TRANSACTIONS OFF Cuando la opcin ANSI_DEFAULTS est establecida en ON, IMPLICIT_TRANSACTIONS tambin se establece en ON. El siguiente ejemplo muestra el script anterior haciendo uso de transacciones explicitas.
select * from INSTRUCTOR BEGIN TRANSACTION -- O solo BEGIN TRAN BEGIN TRY UPDATE INSTRUCTOR SET TEL_INS ='71923456' WHERE COD_INS='I-001' /* Confirmamos la transaccion*/ COMMIT TRANSACTION -- O solo COMMIT END TRY BEGIN CATCH /* Hay un error, deshacemos los cambios*/ ROLLBACK TRANSACTION -- O solo ROLLBACK PRINT 'Se ha producido un error!' END CATCH

El siguiente ejemplo muestra el mismo script con transacciones implicitas.


/* PARA TRANSACCIONES IMPLICITAS */ SET IMPLICIT_TRANSACTIONS ON BEGIN TRANSACTION -- O solo BEGIN TRAN BEGIN TRY UPDATE INSTRUCTOR SET TEL_INS ='71923456' WHERE COD_INS='I-001' /* Confirmamos la transaccion*/ COMMIT TRANSACTION -- O solo COMMIT END TRY BEGIN CATCH /* Hay un error, deshacemos los cambios*/ ROLLBACK TRANSACTION -- O solo ROLLBACK PRINT 'Se ha producido un error!' END CATCH

Transacciones distribuidas: Entre dos o ms bases de datos. Gestionado internamente por SQL Server Entre dos o ms servidores. Servicio MSDTC (Microsoft Distributed Transaction Coordinator). Tiene dos fases: preparacin y confirmacin. o BEGIN DISTRIBUTED TRANSACTION <nombre> o SAVE TRANSACTION <nombre>

Niveles de aislamiento admitidos por SQL Server: Read uncommitted (lectura no confirmada) La transaccin no lee datos corruptos. Read committed (lectura confirmada) Predeterminado. La transaccin puede ver los datos despus de que hayan sido confirmados por otras transacciones. Repeatable read (lectura repetible) Asegura que la lectura se puede repetir

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

P g i n a | 17

Serializable (serializable) El nivel ms alto de aislamiento, en donde las transacciones son completamente aisladas las unos de las otras.

Disponibilidad de los datos en los diferentes niveles de aislamiento Nivel de aislamiento Read uncommitted Read commintted Repeatable read Serializable dirty read S No No No non-repeatable read s s no no phantom read s s s no

Dirty read Leer registros que han sido modificados. Como sea que los datos se estn cambiando el resultado puede ser impredicible. Phantom read Ver registros borrados por otras transacciones. Cuando enviamos esta sentencia al SQL Server se escribe en el fichero de transacciones lo que va a ocurrir y a continuacin realiza los cambios necesarios en la base de datos. Si hay algn tipo de problema al hacer esta operacin el SQL Server puede leer en el fichero de transacciones lo que se estaba haciendo y si es necesario puede devolver la base de datos al estado en el que se encontraba antes de recibir la sentencia. Por supuesto este tipo de transacciones no requieren de nuestra intervencin puesto que el sistema se encarga de todo. Sin embargo si hay que realizar varias operaciones y queremos que sean tratadas como una unidad tenemos que crear esas transacciones de manera explcita. Sentencias para una transaccin Como decamos una transaccin es un conjunto de operaciones tratadas como una sola. Este conjunto de operaciones debe marcarse como transaccin para que todas las operaciones que la conforman tengan xito o todas fracasen. La sentencia que se utiliza para indicar el comienzo de una transaccin es BEGIN TRAN. Si alguna de las operaciones de una transaccin falla hay que deshacer la transaccin en su totalidad para volver al estado inicial en el que estaba la base de datos antes de empezar. Esto se consigue con la sentencia ROLLBACK TRAN. Si todas las operaciones de una transaccin se completan con xito hay que marcar el fin de una transaccin para que la base de datos vuelva a estar en un estado consistente con la sentencia COMMIT TRAN. Ejemplo USE AUTO_ESCUELA /*E1. ESTA TRANSACCION CORRESPONDE A LA MODIFICACION DE DATOS DEL ALUMNO UTILIZANDO TRANSACCIONES.*/ select * from ALUMNO BEGIN TRANSACTION DECLARE @Error int --declaramos una variable para almacenar error UPDATE ALUMNO SET DIR_ALU='C/VIENTE N123' WHERE MAT_ALU= 'CFR-24212' SET @Error=@@ERROR --Si ocurre un error almacenammos el codigo de error PRINT 'EL ERROR ES: '+ CAST (@ERROR AS varchar) IF(@@ERROR <>0)GOTO tratarError COMMIT TRANSACTION tratarError: IF(@@ERROR <>0) BEGIN PRINT 'Ha ocurrido un error, abortamos la transaccion' ROLLBACK TRANSACTION END select * from ALUMNO

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

P g i n a | 18

Como se puede ver para cada sentencia que se ejecuta miramos si se ha producido o no un error, y si detectamos un error ejecutamos el bloque de cdigo que deshace la transaccin. Hay una interpretacin incorrecta en cuanto al funcionamiento de las transacciones que est bastante extendida. Mucha gente cree que si tenemos varias sentencias dentro de una transaccin y una de ellas falla, la transaccin se aborta en su totalidad. Nada ms lejos de la realidad! Si tenemos dos sentencias dentro de una transaccin. USE AUTO_ESCUELA BEGIN TRAN UPDATE ALUMNO SET DIR_ALU='C/VIENTE N123' WHERE MAT_ALU= 'CFR-24212' UPDATE ALUMNO SET DIR_ALU='C/VIENTE N123' WHERE MAT_ALU= 'CFR-24212' COMMIT TRAN Estas dos sentencias se ejecutarn como una sola. Si por ejemplo en medio de la transaccin (despus del primer update y antes del segundo) hay un corte de electricidad, cuando el SQL Server se recupere se encontrar en medio de una transaccin y, o bien la termina o bien la deshace, pero no se quedar a medias. El error est en pensar que si la ejecucin de la primera sentencia da un error se cancelar la transaccin. El SQL Server slo se preocupa de ejecutar las sentencias, no de averiguar si lo hacen correctamente o si la lgica de la transaccin es correcta. Eso es cosa nuestra. Transacciones anidadas Otra de las posibilidades que nos ofrece el SQL Server es utilizar transacciones anidadas. Esto quiere decir que podemos tener transacciones dentro de transacciones, es decir, podemos empezar una nueva transaccin sin haber terminado la anterior. Asociada a esta idea de anidamiento existe una variable global @@TRANCOUNT que tiene valor 0 si no existe ningn nivel de anidamiento, 1 si hay una transaccin anidada, 2 si estamos en el segundo nivel de anidamiento y as sucesivamente. La dificultad de trabajar con transacciones anidadas est en el comportamiento que tienen ahora las sentencias COMMIT TRAN y ROLLBACK TRAN ROLLBACK TRAN: Dentro de una transaccin anidada esta sentencia deshace todas las transacciones internas hasta la instruccin BEGIN TRANSACTION ms externa. COMMIT TRAN: Dentro de una transaccin anidada esta sentencia nicamente reduce en 1 el valor de @@TRANCOUNT, pero no finaliza ninguna transaccin ni guarda los cambios. En el caso en el que @@TRANCOUNT=1 (cuando estamos en la ltima transaccin) COMMIT TRAN hace que todas las modificaciones efectuadas sobre los datos desde el inicio de la transaccin sean parte permanente de la base de datos, libera los recursos mantenidos por la conexin y reduce @@TRANCOUNT a 0. Como siempre un ejemplo es lo mejor para entender cmo funciona. /* E2.REALIZAR DOS TRANSACCIONES CON LA TABLA ALUMNO */ BEGIN TRAN UPDATE ALUMNO SET NOM_ALU = 'Sofia' WHERE MAT_ALU='PCS-23212' BEGIN TRAN UPDATE ALUMNO SET PAT_ALU = 'Perez' WHERE MAT_ALU='PCS-23212' -- Este COMMIT solo afecta a la segunda transaccion. COMMIT -- Este ROLLBACK afecta a las dos transacciones. ROLLBACK Una consideracin a tener en cuante cuando trabajamos con transacciones anidadas es la posibilidad de utilizar puntos de guardado o SAVEPOINTs.

2. SQ

LyTRANSACT SQL TECNOLOGIA BASE DE DATOS-

Lic. Julia Zenteno Z.

P g i n a | 19

Puntos de recuperacin (SavePoint). Los puntos de recuperacin (SavePoints) permiten manejar las transacciones por pasos, pudiendo hacer rollbacks hasta un punto marcado por el savepoint y no por toda la transaccin. El siguiente ejemplo muestra como trabajar con puntos de recuperacin. /* E3. DE LA ACTUALIZACION DE LA TABLA ALUMNO GUARDAR EL PUNTO DE TRANSACCION DE LA PRIMERA TRANSACCION*/ BEGIN TRAN UPDATE ALUMNO SET NOM_ALU = 'Sofia' WHERE MAT_ALU='PCS-23212' SAVE TRANSACTION P1 -- Guardamos la transaccion (Savepoint) PRINT 'SE GUARDO EL PUNTO DE TRANSACCION DE LA PRIMERA TRANSACCION' UPDATE ALUMNO SET PAT_ALU = 'Perez' WHERE MAT_ALU='PCS-23212' -- Este ROLLBACK afecta solo a las instrucciones -- posteriores al savepoint P1. ROLLBACK TRANSACTION P1 -- Confirmamos la transaccion COMMIT EJERCICIO N 5 UTILIZAR LA BASE DE DATOS MATRICULA 1. Crear un procedimiento almacenado para listar todas las especialidades que curso el alumno 'ROGELIO ARCE TORREZ'. 2. Realizar un proceso almacenado para cambiar de nombre y apellido segn su codigo. Si no existe el codigo insertar a la persona con el nombre y codigo introducidos e inscribirlo a la especialidad de oracle. 3. Crear un procedimiento almacenado que permita insertar o adicionar un alumno, inscribiendolo y anotando su calificacion. 4. Utilizando una transaccion modificar de datos del PROFESOR 'OMAR'PEREZARMAYO' en su direccin e insertar un nueva nueva categoria. 5. Utilizando una transaccion modificar de datos de la especialidad con respecto a su costo (pension) y otra para modificar los datos de la especialidad con respecto a la vacancia gravar el punto de transaccion.

Das könnte Ihnen auch gefallen