UTNianos

Versión completa: [APORTE] FINAL GDD 20/12/2016
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas! Si alguno tiene una foto o algo le pido que la publique, yo escribo lo que me acuerdo

V o F:

1)Si una función de hash tiene poca dispersión es más probable que haya colisiones
2)En una vista nunca se pueden realizar inserts

Teoría:

Mencione elementos del motor de base de datos para la seguridad
Mencione que utilidad tiene saber el plan de ejecución de una consulta

Práctica:

3a) Te daban una query en pl/sql, había que pasarla a ansi sin usar el outer join.

Select nombre, importe, nvl(cli_id, "sin cliente")
From cliente c, factura f
where f.cli_id(+) = c.cli_id
and f.anio > (sysdate - 365)

Aclaro que el (+) al lado del f.cli_id reprensenta un left join, osea lo que hacía esa query era traer todas las facturas, tengan clientes o no, y si no tenían, mostraba "sin cliente"

3b) Te daban una query y era un multiple choice a ver que pasaba.
La solicitado por la query era traer las facturas del ultima año que no estén anuladas (Aclaraba que una factura anulada era aquella que no tenía nada en f.cli_id)

Select f.* from Facturas, clientes where f.cli_id = c.cli_id and f.anio > (sysdate - 365) and f.cli_id is not null


a)Se ejecuta y trae lo pedido
b)Se ejecuta y no trae lo pedido
c)Se ejecuta pero posee un filtro redundante
d)Se ejecuta pero posee un filtro redundante y no trae lo pedido
e)No se ejecuta

(Las opciones no estaban en ese orden ni eran tal cual, pero para que tengan una idea)


Respuestas:
1) V. Bastante evidente.
2) F. También bastante evidente. Las vistas te dejan insertar siempre y cuando tengas permisos y cumplas las constraints de las tablas originales.
(En el 90% de los casos que ponen NUNCA, SIEMPRE son falsas =P)

La teoría nada loco, te podés explayar bastante en ambos temas.

La práctica.
El 3a) lo resolví con un union all, la parte de arriba traia todos los que tenian clientes y la de abajo todos los sin clientes. Bastante pavo también

3b) La respuesta era la c). El filtro is not null era redundante porque si ya habias joineado te evitas registros nulos ahí por c.cli_id es pk de cliente.

Me saqué 9 así que los V o F deben estar ok porque sino tendría máximo 8 (restan los V o F). Probablemente algún chamuyo de la teoría no les gustó o algún error de sintaxis en el 3a, pero por ahí andan las respuestas gente.

Saludos y buen final de año!
Hola!
Estaría bien el 3a:


select nombre, importe, cli_id
from cliente c, factura f
where f.cli_id = c.cli_id
and f.anio > (sysdatetime - 365)
and cli_id is not null
union
select nombre, importe, isnull(cli_id, 'sin cliente')
from cliente c, factura f
where f.cli_id = c.cli_id
and f.anio > (sysdatetime - 365)
and cli_id is null

Utnianos! Les subo el final de GDD del 20-12-16.

[Imagen: u9prUvH.png]

No se olviden de agradecer! thumbup3
V o F:


2)En una vista nunca se pueden realizar inserts

2) F. También bastante evidente. Las vistas te dejan insertar siempre y cuando tengas permisos y cumplas las constraints de las tablas originales.
(En el 90% de los casos que ponen NUNCA, SIEMPRE son falsas =P)

WO wo wo

esta no es Verdadera? tenia entendido que en una vista NO se pueden realizar inserts.. Soy alto burro??
(07-12-2019 20:14)Diesel escribió: [ -> ]WO wo wo

esta no es Verdadera? tenia entendido que en una vista NO se pueden realizar inserts.. Soy alto burro??

Pensá que en los apuntes dice: "es el resultado de una consulta y es tratado como una tabla".

Tiene algunas restricciones igualmente.. No podés insertar en vistas que tengan JOINS u ORDER BY's.

Y pensá que está la función que le podes agregar a la vista que es "WITH CHECK OPTION" que sólo te deja insertar las filas que cumplan con la condición que le agregues. Así que por definición de esa función, si permite inserts.
(11-02-2017 07:41)rovila escribió: [ -> ]Hola!
Estaría bien el 3a:


select nombre, importe, cli_id
from cliente c, factura f
where f.cli_id = c.cli_id
and f.anio > (sysdatetime - 365)
and cli_id is not null
union
select nombre, importe, isnull(cli_id, 'sin cliente')
from cliente c, factura f
where f.cli_id = c.cli_id
and f.anio > (sysdatetime - 365)
and cli_id is null


Al margen de que te estoy contestando 1 año despues, no tengo ni la menor idea de lo que es sysdatetime -365 o sea no entiendo porque lo hace... Haria un GETDATE() en SQL que lo conozco y YEAR de eso o DAY y le resto los dias nose.. quizas me pare y les pregunte si me toman esa funcion, pero lo que te queria comentar es que si vos haces el filtro de que vas a traer NULLS ya directamente deberias imprimir 'sin cliente'




select nombre, importe, cli_id
from cliente c, factura f
where f.cli_id = c.cli_id
and f.anio > (sysdatetime - 365)
and cli_id is not null
union
select nombre, importe, 'sin cliente'
from cliente c, factura f
where f.cli_id = c.cli_id
and f.anio > (sysdatetime - 365)
and cli_id is null




y sino una sola query sin UNION pero poniendo "isNull(valor,'Sin cliente') "
Pero la query funciona igual asi que deberia estar bien.
Abrazo!
URLs de referencia