UTNianos

Versión completa: [APORTE] [Gestión de Datos] Final 26/02/2013
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Gente, les dejo el Final de Gestión de Datos de la fecha pasada (26/02/13), saludoos! thumbup3

Final GDD 26/02/13:

[attachment=5906]
El punto 3.a)

Cita:CLIENTES
IdCliente (pk) int NOT NULL
Nombre char(100) null
Apellido char(100) null
DNI number null
Mail char(50) null
Genero char (1) null
Localidad char(50) null

Validar sin modificar las estructuras vigentes, que si el valor del campo DNI posee datos este no puede ser igual al de otro cliente, se sabe de antemano que falta el valor de DNI para más de 100 clientes.

Alguien hizo este final?
Cómo se valida el campo DNI? por que con UNIQUE no permitiría que haya nulls, entonces la idea es que se haga un trigger?
....
con un trigger podria ser tranquilamente, verificas que un select de todos los otros datos te de 0


igual, la respuesta creo es con un check constraint

http://www.w3schools.com/sql/sql_check.asp


aunque no se si eso implica "modificar la estructura de la tabla" =P

suponiendo que si (para agregarlo es un alter table) la opcion si, seria un trigggggggger

me rectifico, con un check constraint no. Asique si, la tapos es un triggggger
El pto b)

puede ser q la respuesta sea el item V ??

Gracias!
(21-05-2013 02:01)MSC escribió: [ -> ]El pto b)

puede ser q la respuesta sea el item V ??

Gracias!

El 3.b decís?
Yo lo probé y si la tabla LOCALIDADES está vacía no devuelve nada, sería la opción II
y la justificación sería que al ser un JOIN entre clientes y localidades, y siendo está última una tabla vacía el producto cartesiano de ambas tablas es 0 (?)
lo volví a hacer , lo probe
y me da como a vos, la respuesta seria la II "no devuelve filas"
un join con una tabla vacia no devuelve nada, si es INNER JOIN

si es left join y la tabla vacia es la de la derecha (onda select.. from A left join B.. y B esta vacia) devuelve las filas de A
Buenas, a ver si alguno me da una mano...

El 3.a) Podria ser algo asi? No me termina de convencer, a ver si alguno me lo puede corregir




CREATE TRIGGER Validar
ON clientes
AFTER INSERT OR UPDATE
FOR EACH ROW

BEGIN
IF(not null(:new.dni) AND EXISTS(SELECT dni FROM clientes WHERE dni = :new.dni)
RAISE ERROR ('Son iguales')

END;


el raise error tiene rollback incluido ??

yo haria igual un instead of insert or update mas que un after

y haria el insert una vez comprobado el if de que puedo hacerlo
Ahh claro. Ahi va mejor si! Gracias!
(06-08-2013 00:32)gonnza escribió: [ -> ]el raise error tiene rollback incluido ??

yo haria igual un instead of insert or update mas que un after

y haria el insert una vez comprobado el if de que puedo hacerlo

No sería más fácil hacer un BEFORE? Si no cumple la restricción tirás error y sino pasa el trigger como si nada

PD: Pregunto desde la ignorancia eh..
el before no existe en sql server (t-sql es sql server)

podras decir "en mysql si existe!" pero mysql no es t-sql Ye

IMAGINO que si aclaras que es mysql te lo aceptaran como valido, pero la sintaxis creo (CREO) que cambia levemente (por ej va un ";" al final de cada sentencia)
Hola! Alguien podria decirme si esto esta bien para el punto 3.A. Tengo 0 practica con triggers y no se si lo uso bien. Gracias!

CREATE TRIGGER IntegridadDni
ON Clientes
FOR INSERT, UPDATE AS

IF (SELECT COUNT(inserted.DNI) from inserted
WHERE EXISTS (SELECT DNI from clientes where DNI=inserted.DNI) ) >=1
BEGIN
RAISEERROR(´DNI DUPLICADO')
ROLLBACK TRANSACTION
END
IgnacioM no estas indicando que tipo de trigger es (After, instead of)

Imagino que quisiste hacer "After", porque si fuera Instead of te estaría faltando el insert en caso de que no haya duplicados (acordate que el instead of reemplaza totalmente el insert/update/delete)
Tenia entendido que poner "FOR" era lo mismo que poner "AFTER". Quizas tenia entendido cualquier cosa jaja
Páginas: 1 2
URLs de referencia