miércoles, 28 de noviembre de 2012
USAR FRECUENCIAS CON SQL(ORACLE)
Este es un tema simple, esta es la forma de crear una secuencia, recuerden que al campo al que se le aplica la secuencia debe ser number va.
CREATE SEQUENCE SECUENCIACLIENTES
MINVALUE 1
MAXVALUE 9999999999999999999999999999
INCREMENT BY 1
START WITH 1;
Use esta tabla:
CREATE TABLE "USER".TEST
(
ID NUMBER,
NOMBRE VARCHAR2(44 BYTE)
)
Y la llamas así:
insert into test values (secuenciaclientes.nextval, 'nombre'||secuenciaclientes.nextval);
jueves, 22 de noviembre de 2012
FUNCIONES CON PARAMETROS SQL(ORACLE)
Para iniciar estoy usando esta tabla con la correspondiente info.
create or replace function f_incremento10 (avalor number)
return number
is
begin
return avalor+(avalor * 0.1);
end;
Y se puede invocar a la función a través de esta sentencia.
select descripcion, stock, f_incremento10(precio) as Incremento from producto;
Al ejecutar el select me muestra el incremento!
miércoles, 21 de noviembre de 2012
FUNCIONES ÚTILES EN ORACLE Y MySQL
Funciones de agregación
Las funciones que trabajan sobre un conjunto de datos, como COUNT, SUM,
AVG, MIN y MAX funcionarán en Oracle igual que en MySQL.
Funciones de cadenas
- Convertir a minúsculas
- MySQL: LOWER o LCASE
- Oracle: LOWER: LOWER(nombre)
- Convertir a mayúsculas
- MySQL: UPPER o UCASE
- Oracle: UPPER: UPPER(ciudad)
- Extraer una subcadena
- MySQL: Para cualquier posición: MID, SUBSTR o SUBSTRING; desde la izquierda: LEFT; desde la derecha: RIGHT
- Oracle: SUBSTR: SUBSTR(nombre, 1, 4)
- Ver si una cadena contiene a otra, y en qué posición
- MySQL: INSTR o LOCATE
- Oracle: INSTR: INSTR(nombre, 'Juan')
- Eliminar espacios iniciales o finales
- MySQL: RTRIM para la derecha, LTRIM a la izquierda, TRIM en ambos lados
- Oracle: RTRIM, LTRIM, TRIM: TRIM(direccion)
- Reemplazar parte de una cadena por otra
- MySQL: REPLACE
- Oracle: REPLACE: REPLACE(nombre, 'D.', 'Don')
- Longitud de la cadena
- MySQL: LENGTH
- Oracle: LENGTH: LENGTH(nombre)
- Formar una cadena a partir de varias
- MySQL: CONCAT, para dos o más subcadenas
- Oracle: CONCAT, para dos subcadenas: CONCAT(apellidos, nombre); doble barra para concatenar varias: apellido || ', ' || nombre
- Esquivar valores nulos
- MySQL: IFNULL: IFNULL(direccion, 'No disponible')
- Oracle: NVL: NVL(direccion, 'No disponible')
- Comprobar condiciones
- MySQL: CASE: SELECT CASE tipoCliente WHEN 'p' THEN 'Propio' WHEN 'a' THEN 'Ajeno' ELSE 'Desconocido'; IF: SELECT IF(tipoCliente='p', 'Propio', 'Ajeno')
- Oracle: DECODE: SELECT DECODE (tipoCliente, 'p','Propio', 'a','Ajeno', 'Desconocido' FROM CLIENTE
lunes, 19 de noviembre de 2012
CUBOS DE INFORMACIÓN
Una de las formas más populares de analizar la información es mediante el uso de cubos OLAP (o bases de datos multidimensionales). Básicamente, un cubo es una estructura de datos organizada mediante jerarquías. Cada indicador se puede evaluar en cualquiera de los niveles de las jerarquías. Así, por ejemplo, se pueden obtener las "ventas" a nivel diario, mensual, o a anual, para un cliente, una provincia, o un país…
El uso de cubos OLAP tiene dos ventajas fundamentales:
- Facilidad de uso. Una vez construido el cubo, el usuario de negocio puede consultarlo con facilidad, incluso si se trata de un usuario con escasos o nulos conocimientos técnicos. La estructura jerárquica es sumamente fácil de comprender para la mente humana, y si ésta coincide con el modelo de negocio, los resultados suelen ser espectaculares, ya que el cubo se convierte en una gran "tabla dinámica" que el usuario puede consultar en cualquier momento.
- Rapidez de respuesta. Habitualmente, el cubo tiene precalculados las distintas agregaciones, por lo que los tiempos de respuesta son muy cortos. Si el cubo está bien diseñado, resultará igual de rápido consultar las ventas de una ciudad, o las ventas de todo el país, o incluso el total de ventas de la compañía.
Sin embargo, no todo son ventajas… Estos son algunos de los inconvenientes:
- El cubo es estructura adicional de datos que mantener y actualizar, eso supone un gasto extra de recursos (servidores, discos, procesos de carga…).
- El modelo de negocio no siempre se adapta bien en un modelo jerárquico. Por poner algunos ejemplos típicos: Una semana no pertenece a un único mes, o las zonas de venta corporativas no tienen porqué coincidir con la estructura provincial de cada país, o varios responsables pueden encargarse de una misma tienda, o distintos departamentos de la compañía pueden utilizar distintas agrupaciones de los productos... Estas casuísticas, que pueden parecer triviales, son habituales en cualquier compañía, y dificultan enormemente la construcción y uso de los cubos OLAP…
La alternativa a los cubos son las habituales bases de datos relacionales. En estos casos, se suele hablar de cubos o herramientas ROLAP, donde el usuario tiene la sensación de estar trabajando con un cubo, aunque internamente existe una base de datos normal y corriente… Estos sistemas son bien conocidos, y siguen unos estándares más aceptados que en el caso de las bases de datos multidimensionales, por lo que -en mi opinión- siempre debería ser una opción a evaluar dentro de cualquier proyecto de Business Intelligence.
Desgraciada a afortunadamente, no existe una única solución que valga para todos las compañías y proyectos… Cada caso se tiene que estudiar y decidir, según las necesidades, si realmente vale la pena utilizar cubos OLAP. Me atrevo a lanzar la siguiente recomendación:
- Un cubo no puede sustituir a un modelo relacional. Detrás de cada cubo, debería existir un único repositorio con la información normalizada… Es decir, primero normalicemos la información que queremos analizar y después, si en necesario, construyamos uno o varios cubos para los usuarios…
jueves, 15 de noviembre de 2012
SOLUCION 2 LABORATORIO 1 DE BASE DE DATOS
Bueno, aquí les traigo el query numero dos de este laboratorio. Espero les sirva de mucho.
o Seleccione el top 10 de las películas que más tiempo han pasado fuera de la tienda por concepto de alquiler en los últimos 3 meses.
SELECT *
FROM(
SELECT P.NOMBRE, D.ID_PELICULA, COUNT(*) AS CONTEO
FROM
PELICULA P,
DETALLEP_ALQUILER D,
ALQUILER A
WHERE P.ID_PELICULA = D.ID_PELICULA
AND D.ID_ALQUILER = A.ID_ALQUILER
AND A.F_ALQUILER >= '01/01/2012'
GROUP BY P.NOMBRE, D.ID_PELICULA
ORDER BY CONTEO DESC)
WHERE ROWNUM <=5
o Seleccione el top 10 de las películas que más tiempo han pasado fuera de la tienda por concepto de alquiler en los últimos 3 meses.
SELECT *
FROM(
SELECT P.NOMBRE, D.ID_PELICULA, COUNT(*) AS CONTEO
FROM
PELICULA P,
DETALLEP_ALQUILER D,
ALQUILER A
WHERE P.ID_PELICULA = D.ID_PELICULA
AND D.ID_ALQUILER = A.ID_ALQUILER
AND A.F_ALQUILER >= '01/01/2012'
GROUP BY P.NOMBRE, D.ID_PELICULA
ORDER BY CONTEO DESC)
WHERE ROWNUM <=5
miércoles, 14 de noviembre de 2012
SOLUCION 1 LABORATORIO 1 DE BASE DE DATOS
Como recordaran, en el el siguiente en este enlace AQUI se muestra un laboratorio de BD, aquí la solución al primer query.
select a.nombre AS ACTOR, C.NOMBRE AS CATEGORIA
from actores a, detalleP_A b, pelicula p, categoria c
where a.id_actor = B.ID_ACTOR
and b.id_pelicula = P.ID_PELICULA
and p.id_categoria = C.ID_CATEGORIA
and c.nombre <> 'DOCUMENTAL'
GROUP BY A.NOMBRE, C.NOMBRE
- Seleccionar todos los actores que aparecen en todos los géneros a excepción de Documentales.
select a.nombre AS ACTOR, C.NOMBRE AS CATEGORIA
from actores a, detalleP_A b, pelicula p, categoria c
where a.id_actor = B.ID_ACTOR
and b.id_pelicula = P.ID_PELICULA
and p.id_categoria = C.ID_CATEGORIA
and c.nombre <> 'DOCUMENTAL'
GROUP BY A.NOMBRE, C.NOMBRE
martes, 13 de noviembre de 2012
Falta "NTLDR" o "NTLDR is missing"
A todos nos ha pasado alguna vez el famoso error "Falta NTLDR" o "NTLDR is missing" bueno pues este problema se resuelve fixeando el mbr y el boot del sistema operativo.
Empecemos con el MBR, ¿que es eso?, bueno, por sus siglas es el “Master Boot record” pero . . . ¿Qué diablos hace? Para empezar se ejecuta al inicio del sistema operativo, y en un modo muy global y abstracto, simplemente busca los SO que tienes instalados en tu disco duro, y si son compatibles con Windows te los muestra en forma de lista para que puedas elegir cual instalar.
Ok, ahora si veamos como repararlo:
1 – Inserta el disco de instalación de Windows XP, y dale que arranque desde ahí.
2 – Cuando llegues a la pantalla de abajo:
Verás 3 opciones: Instalar Windows XP (Enter), Recuperar XP usando la consola de recuperación (R) y Salir de la instalación (F3). Pulsamos R.
3 - Luego de esto entraras a la siguiente sección:
Donde pregunta desde donde quieres comenzar sesión escribe1. A continuación nos pide una contraseña de administrador (si tienes contraseña es probable que sea esa, jejeje). PulsamosEnter y ya estamos en la Consola de Recuperación.
4- Es aquí donde debes escribir FIXMBR y ya que estamos aquí también teclea FIXBOOT.
Una vez hecho esto, no deberías tener ningún problema con tu arranque.
Si de plano no funciona prueba a reinstalar windows pero eliminando la partición, o en fdisk estableciendo la particion de tu sistema operativo como la partición activa.
LABORATORIO 1 DE BASE DE DATOS
Hola a todos, este es un laboratorio que nos dejaron en la U, para el curso de BD2, para los que esten interesados lo iré desarrollando por segmentos, quizá un query por día.
De momento este es el ER.
CASO
PRÁCTICO
Descripción
Como
estudiante de Ingeniería en Sistemas y futuro profesional de las ciencias de la
computación, es solicitado sus servicios para el diseño de un modelo de datos
para representar las reglas del negocio de una tienda de renta de videos y
juegos de video.
Tienda
de Videos Sevastopol
Actualmente
en la capital se tienen en funcionamiento tres tiendas de alquiler de videos en
formato DVD y BlueRay, en estos formatos se manejan
diversas categorías como Infantil, Acción, Drama, Ciencia Ficción, etc,
y cada categoría se divide
en estreno y no estreno.
Es
común que los clientes pregunten por las películas de actores específicos, por lo que
es necesario tener disponible la información de cuales películas y en que
géneros aparece dicho actor. Otro factor importante por el cual un cliente
decide alquilar una película es la calificación de la misma, existen varias clasificaciones por el grado de crudeza o de lenguaje que se expresan en las mismas,|
por ejemplo PG, PG-13, R, X, etc. Cada clasificación define la edad
mínima del público que puede ver dicho filme,
Como
información general de cada película se debe mantener la cantidad de copias que se tiene de las
misma así como el formato,
ubicación (en que tienda, pasillo y góndola) , duración en minutos, actores
principales, algún premio ganado por la película o alguno de los actores que
participa en la misma. Como valor agregado se debe contar con la biografía de
todos los actores que aparecen en los papeles protagónicos. Esta información
debe ser como mínimo, lugar y fecha de nacimiento, una descripción de su vida
así como el listado de todos los filmes en los que ha aparecido.
Cada
cliente deberá contar con una membresía que le permita retirar una o más películas,
por lo que se debe mantener información relevante de los clientes como: Nombre,
dirección, teléfono fijo, móvil, número de nit, número de cédula, fecha de
apertura de la membresía así como la de finalización, causa de la finalización.
Las posibles tipos de causas para finalizar una membresía son: mal servicio,
calidad inapropiada de los discos, precio, poco inventario, títulos
desactualizado y otros.
Para
el control de los juegos, se toman los mismos criterios que para las películas,
la única variante es que en el caso de los juegos, los mismos pueden utilizarse
en distintas consolas, por lo que la información de la consola debe ser
adicionada. El tiempo que un cliente puede tener una película o juego dependerá
del número rentado.
1 película/juego
|
Dos días
|
2 película/juego
|
Tres días
|
3 película/juego
|
Cinco días
|
4 o más películas/juegos
|
Siete días
|
Entregables:
· Modelo E/R
· Escriba las siguientes consultas
o Seleccionar todos los actores que aparecen en
todos los géneros a excepción de Documentales.
o Seleccione el top 10 de las películas que más tiempo
han pasado fuera de la tienda por concepto de alquiler en los últimos 3 meses.
o Seleccione los títulos que más rotación presentan para
los últimos tres meses y que no sean estrenos.
o Seleccione todos los clientes que no han rentado
una película en los últimos 90 días y que hayan tenido hasta entonces una renta
promedio de Q.100 mensuales el los anteriores 6 meses.
o Seleccione
todos los títulos que no han sido rentadas en los últimos 15 días y que cuentan
con un actor que ha ganado al menos un Oscar o Globo de Oro. Para cada titulo
mostrar el número de alquileres que ha tenido en los últimos 6 meses.
o Seleccione el top 10 de los clientes que más facturación
generaron en los últimos 12 meses y que no hayan rentado un video juego en los
últimos 30 días
o Seleccione las películas y los géneros a los que
pertenecen donde aparezcan actores que no aparezcan en la categoría de Ciencia
Ficción y Drama y que en algún momento hayan estado en el top 10 de las
películas mas rentadas en los últimos tres meses.
lunes, 12 de noviembre de 2012
NORMAS PARA OPTIMIZACION DE CONSULTAS
Hola a todos perdón por las mayúsculas.
- LAS CONDICIONES DEBEN IR SIEMPRE EN EL ORDEN EN QUE ESTA DEFINIDO EL INDICE. SINO HUBIESE INDICE POR LAS COLUMNAS UTILIZADAS, SE PUEDE AÑADIR YA QUE TENER INDICES EXTRAS SOLO PENALIZA LOS TIEMPOS DE INSERCIÓN, ACTUALIZACIÓN Y BORRADO.
- CUANDO SE CREA UNA RESTRICCIÓN DE PRIMARY KEY O UNIQ, SE CREA AUTOMÁTICAMENTE UN INDICE SOBRE ESA COLUMNA.
- HAY QUE OPTIMIZAR DOS TIPOS DE INSTRUCCIONES.
- LAS QUE CONSUMEN MUCHO TIEMPO EN EJECUTARSE.
- AQUELLAS QUE NO CONSUMEN MUCHO TIEMPO PERO SON EJECUTADAS MUCHAS VECES.
- SI UNA APLICACIÓN QUE FUNCIONA RAPIDO SE VUELVE LENTA, HAY QUE PARAR Y ANALIZAR LOS FACTORES QUE HAN PODIDO CAMBIAR:
- EL VOLUMEN DE DATOS
- NUEVOS INDICES
- TRIGGERS
- UTILIZAR SIEMPRE QUE SEA POSIBLE LA MISMA CONSULTA.
- LAS CONSULTAS MAS UTILIZADAS DEBEN ENCAPSULARSE EN PROCEDIMIENTOS ALMACENADOS. ESTO ES DEBIDO A QUE EL PROCEDIMIENTO ALMACENADO SE COMPILA Y ANALISA UNA SOLA VEZ, MIENTRAS QUE UNA CONSULTA LANZADA A LA BASE DE DATOS DEBE SER ANALIZADO OPTIMIZADO Y COMPILADO CADA VEZ QUE SE LANZA.
- LOS FILTROS DE LAS CONSULTAS DEBEN SER LO MAS ESPECIFOCOS POSIBLES.
- WHERE CAMPO = ‘JOSUE’;
- DEBE EVITAR LA CONDICION IN
- WHERE CODIGO_CLIENTE IN (SELECT …) – EN SU LUGAR USAR UN JOIN
- MANUALMENTE SOLO ACEPTA 100 VALORES
- TENER CUIDADO CUANDO SE METE UN SELECT DENTRO DE UN IN YA QUE LA CONSULTA PUEDE RETORNAR MUCHAS FILAS, SE RECOMIENDA USAR UN JOIN.
- CUANDO SE HACE UNA CONSULTA MULTITABLA EL ORDEN EN EL QUE SE PONEN LAS TABLAS EN EL FROM INFLUYE EN EL PLAN DE EJECUCIÓN, AQUELLAS TABLAS QUE RETORNAN MAS FILAS DEBEN IR EN LAS PRIMERAS POSICIONES, MIENTRAS LAS TABLAS CON POCAS FILAS DEBEN SITUARSE AL FINAL DE LA LISTA DE LAS TABLAS.
- SI EN LA CLAUSULA WHERE SE UTILIZAN CAMPOS INDEXADOS COMO ARGUMENTOS DE FUNCIONES EL INDICE QUEDARA DESACTIVADO.
- WHERE SALDO > 0
- WHERE ROUND(SALDO) > 0 -- DE NADA SIRBE USAR UN INDICE PORQUE ESTA INSTRUCCIÓN LO DESACTIVA (ROUND)
- SIEMPRE QUE SEA POSIBLE SE DEBE EVITAR LAS FUNCIONES DE CONVERSIÓN DE TIPO DE DATOS E INTENTAR HACER SIEMPRE COMPARACIONES DE CAMPOS DEL MISMO TIPO.
- CAST
- UNA CONDICIÓN NEGADA CON EL OPERADOR NOT DESACTIVA LOS INDICES.
- NOT IN
- UNA CONSULTA CALIFICADA CON LA CLAUSULA DISTINC DEBE SER ORDENADA POR EL SERVIDOR, AUN QUE NO SE INCLUYA LA CLAUSULA ORDER BY. (AL DISTINC PONERLE UN ORDER BY)
- SI VA A REALIZAR UNA OPERACIÓN DE INSERCIÓN, BORRADO O ACTUALIZACIÓN MASIVA, ES CONVENIENTE DESACTIVAR LOS INDICES, YA QUE POR CADA OPERACIÓN INDIVIDUAL SE ACTUALIZARAN.
- UTILIZAR TRIGGER COMO ULTIMA OPCIÓN.
viernes, 9 de noviembre de 2012
MODIFICAR TIPO DE DATO DE UNA TABLA SQL(ORACLE)
En esta ocasión, estoy creando una tabla, le agrego el campo precio con un tipo de dato number tamaño 10, pero luego me percato que el precio tiene decimales, entonces le cambio el tipo de dato con number tamaño 10 y 2 decimales. Espero les sirva.
Vale la pena mencionar, que si vas a cambiar un tipo de dato, debes tener vacío al menos
create table producto(
idproducto char(10) not null,
descripcion varchar2(50),
stock number(10),
primary key (idproducto)
);
alter table producto
add precio number(10);
modify precio number(10,2);
ALGUNA VEZ TE HAZ PREGUNTADO ¿CÓMO FUNCIONA EL SERVIDOR DNS?
Un vídeo realmente muy bueno, no queda mas que decir, si a alguien le queda dudas respecto a los DNS, con gusto.
AGREGAR UN CAMPO A UNA TABLA YA CREADA EN SQL(ORACLE)
En alguna ocasión te haz preguntado ¿CÓMO AGREGO UN CAMPO? y por no saber hacerlo te haz eliminado la tabla completa, jojojo a mi si me ha pasado jojojo, bueno pues aquí la solución:
create table producto(
idproducto char(10) not null,
descripcion varchar2(50),
stock number(10),
primary key (idproducto)
);
--Agregamos campo PRECIO COMO NUMBER TAMAÑO 10
alter table producto
add precio number(10);
CREAR TABLAS EN SQL(ORACLE)
Bueno crear tablas en SQL es lo mas fácil que se puedan imaginar, lo importante es tener una buena idea de los datos que queremos capturar, dado que posteriormente esa data sirve para la toma de decisiones.
Este es nuestro ER(Entidad Relación):
Bien, ya tenemos la info. que necesitamos, ahora traducir esto a SQL:
Este es nuestro ER(Entidad Relación):
Bien, ya tenemos la info. que necesitamos, ahora traducir esto a SQL:
--Forma 1:
create table clientes(
codigo_cliente char(10) not null,
nombre varchar2(50),
direccion varchar2(50),
estado char(10)
);
--Aquí agregue la primary key a través de un alter table
alter table clientes
add primary key (codigo_cliente);
Forma 2:
--Aquí agregue la primary key dentro de la creación de la tabla.
create table clientes(
codigo_cliente char(10) not null,
nombre varchar2(50),
direccion varchar2(50),
estado char(10),
add primary key (codigo_cliente);
);Espero les haya servido esta info. iré creando el resto de tablas, pero con algunas diferencias.
PRESENTACIÓN
Bueno, que diré soy estudiante de ingeniería en Sistemas, y este blog, esta diseñado para ayudar a solventar dudas de cualquier índole, siempre en el campo informático. Espero que éste sea un blog donde puedas encontrar la ayuda que necesitas!
Creo que no hace falta mencionar, que la idea principal es compartir las ideas de todos, y utilizar la que mas se adecue a nuestra necesidad.
Suscribirse a:
Entradas (Atom)