UTNianos

Versión completa: [APORTE] Final Gestión de Datos 21/02/17
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Gente les dejo el final que tomaron en la fecha de ayer! (sin foto)

VoF:
1- La reexpresión de caracteres al aplicar huffman implica la disminución de 8bits para la expresión de todos los caracteres.
2- La ejecución sin filas de resultado de una query dentro de un trigger genera la cancelación de la transacción.

Teoricas:
1- Explicar Vistas (definicion, utilizacion y ejemplificar)
2- Ventajas y Desventajas de indices Arbol B y Hashing

Practica:
Se posee una tabla creada con una sola columna (col1 as int) vacía
create table prueba (col1 as int)
1- Hay 2 procesos que corren en sesiones diferentes de forma paralela:
Proceso 1
begin transaction
declare @a as int
declare @b as int
select @a = select count(col1) from prueba
select @b = select count(col1) from prueba
commit

Proceso 2
begin transaction
insert into prueba values (select count(col1)+1 from prueba)
commit

a) Variables a y b toman mismo valor
b) Variables a y b toman valores diferentes
c) Los valores depende de los momentos en los que corren los procesos
d) no hay informacion para determinar los valores de a y b
e) Ninguna de las anteriores

2- Se requiere que la tabla posea todos los numeros naturales positivos consecutivos. La tabla es utilizada por distintos sistemas de formas distintas. Que objetos utilizaria (realizar codigo) para realizar lo solicitado sin realizar alteraciones a la tabla

Disculpas si hay algun error de tipeo!! A continuacion las respuestas que puse yo (saque 7 asi que algo bien hubo!)



VoF: Ambos falsos
Teoricas: Explicadas en apuntes varios
Practica:
1- Puse la D, porque no solo no tenemos los tiempos de ejecucion de cada accion (que corran en paralelo no significa que arranquen al mismo tiempo) sino que tampoco tenemos los niveles de aislamiento de cada transaccion. Ambos motivos pueden producir distintos valores para las variables (di algunos ejemplos)
2- Habia que crear un trigger, en mi caso lo realice after insert para que verifique que el numero que se quiere insertar sea el siguiente consecutivo al máximo que estaba en la tabla. (aclare que codifique la solucion en el caso de un insert por vez, sin la posibilidad de realizar un insert con select, para no codificar un cursos)


Saludos!
Aprobé el final, les hago una aclaración: el punto 4) el trigger es update,insert,delete para todos los casos posibles tiene que quedar consistente, aclarado por el profesor.
Les dejo mi resolución de ese puntol, ANDA JOYA!. La probé en sql server.

go
CREATE TRIGGER Final_trigger on Prueba_Final
instead of insert,update
as
Begin tran tran_final
declare @col1 int=0
declare @soy_primero int=0
declare @soy_maximo_mas_1 int =0

declare cursor_final cursor for select col1 from Inserted
open cursor_final
fetch next from cursor_final into @col1
while @@fetch_status = 0
Begin
If ((select count(*) from Prueba_Final)=0)
Begin
If (@col1 = 1)
Begin
insert into Prueba_Final (col1) values (@col1)
fetch next from cursor_final into @col1
set @soy_primero = 1
End
End

IF (@col1 = (select Max(col1)+1 from Prueba_Final))
Begin
insert into Prueba_Final (col1) values (@col1)
fetch next from cursor_final into @col1
set @soy_maximo_mas_1 = 1
End
IF (@soy_primero = 0 and @soy_maximo_mas_1=0)
Begin
Raiserror('No se puede insertar un numero no consecutivo',1,1)
Rollback
close cursor_final
deallocate cursor_final
End
End
close cursor_final
deallocate cursor_final
Commit


go
CREATE TRIGGER Final_trigger_deleted on Prueba_Final
instead of delete
as
Begin tran tran_final
declare @col1 int=0

declare cursor_final cursor for select col1 from Deleted
open cursor_final
fetch next from cursor_final into @col1
while @@fetch_status = 0
Begin
IF (@col1 = (select Max(col1) from Prueba_Final))
Begin
delete from Prueba_Final where col1= @col1
fetch next from cursor_final into @col1
End
Else
Begin
Raiserror('No se puede eliminar un valor del medio porque no quedarían consecutivos',1,1)
Rollback
close cursor_final
deallocate cursor_final
End
End
close cursor_final
deallocate cursor_final
Commit


Saludos!.
El del trigger lo hice solo instead of insert. Le puse una validacion para que tampoco ponga registros repetidos, (aunque no pedia nada de eso, pero hacia tanto calor en el subsuelo que empece a delirar) Y un flag para cortar el loop del while si aparecia uno no consecutivo . Saque 8. La teoria sale tranqui de todos los apuntes. El de huffman mareaba , pero era re falso. Porque justamente es todo lo contrario a codificacion estatica de 8 bits.


CREATE TRIGGER Trig_Prueba ON Prueba
INSTEAD OF INSERT

AS
BEGIN

Declare @col int
Declare @flag int = 0

Declare c_prueba CURSOR FOR (SELECT Col1 FROM Inserted ORDER BY Col1)
OPEN c_prueba
FETCH NEXT FROM c_prueba INTO @col

WHILE @@fetch_status = 0 AND @flag = 0
begin

IF (NOT EXISTS SELECT 1 FROM Prueba WHERE Col1 = @col) AND SELECT MAX(Col1) FROM Prueba + 1 = @col)

begin
insert into Prueba (Col1) values (@col)
end


ELSE

RAISERROR 'No son consecutivos'
Set @flag = 1

FETCH NEXT FROM c_prueba INTO @col

end


CLOSE c_prueba
DEALLOCATE c_prueba


END
Hago un up a esto, si alguien tiene foto, se agradece muchisimo!
URLs de referencia