Archive for the ‘Oracle’ Category

Reconstrucción de índices en línea en Oracle

sábado, noviembre 12th, 2011

Una de las funcionalidades que comenzó en Oracle 9i es la de reconstruir índices «en línea», esto significa que mientras se procede a leer y recontruir la tabla de índices el original se mantiene intacto hasta el momento del término de la operación de reconstrucción.

Para proceder a la reconstrucción en línea debe escribirse

ALTER INDEX el_nombre_del_indice REBUILD ONLINE;

Demorará más para las tablas que son constantemente usadas, o que soy muy grandes, pero en general ningún usuario sentirá esta reconstrucción.

Sobre las alteraciones de un SEQUENCE en Oracle

domingo, mayo 29th, 2011

Uno de los puntos complicados es cuando deseamos alterar una secuencia pero deseamos hacer en caliente (entiendase mientras existe la posibilidad de usuarios conectados). Yo era drastico, eliminaba y volvía a crear la nueva secuencia con la moidificacion de start with, ya que el ALTER SEQUENCE no puede alterar el START WITH.
Para la modificacion del START WITH entonces, existe la posibilidad de modificar el INCREMENT BY, esto debiese se asi:

ALTER SEQUENCE nombre_secuencia INCREMENT BY  monto_del_incremento;
SELECT nombre_secuencia.NEXTVAL FROM DUAL;
ALTER SEQUENCE nombre_secuencia INCREMENT BY  1;

Crear JOB en Oracle

sábado, abril 16th, 2011

Este código crea un JOB en Oracle que se ejecuta cada 1 hora

BEGIN
DBMS_JOB.isubmit (
job => 99,
what => 'procedimiento(''soy un parametro'');',
next_date => SYSDATE,
interval => 'SYSDATE + 1/24 /* 1 Hour */');

COMMIT;
END;

ROWNUM, select union e insert into

martes, marzo 29th, 2011

Un problema que me sucedio radicó en que requería hacer desde una vista ya existente un INSERT INTO hacia una tabla destino, esta vista tenía una columna que hacía de identificador, pero al ver la consulta me di cuenta que utilizaba un UNION, era más o menos así:

insert into tabla (id, col1)
select rownum id, xyz from t1
union
select rounum id, zyx from t2

El problema no era la consulta ya que esta arrojaba resultado, la problematica se encontraba que el id generado no era unico, ya que en ambos casos el rownum partía de 1, lo que provocaba un error en el insert into.

La solución fue, crear un trigger que incrementara una secuencia y el valor lo depositara en ID,

create or replace trigger TRG_tabla 
before insert on tabla
   for each row 
begin  
   if inserting then 
      if :NEW.ID is null then 
         select SQ_tabla.nextval into :NEW.ID from dual;
      end if
   end if
end;

eliminar del insret into la columna ID, y luego ejecutar el insert into, con esto se solución el error de clave duplicada.

insert into tabla (col1)
select xyz from t1
union
select  zyx from t2

CAST en Oracle

martes, marzo 29th, 2011

En oracle existe igual la posibilidad de hacer CAST de los tipos de datos en una consulta, por ejemplo:

select cast(12.2 as NUMBER(10,5)) FROM DUAL;
select cast('usuario' as VARCHAR2(100)) FROM DUAL;

Esto es util para cuando en algun resultado de una vista se esta esperando un tipo de datos especifico. Por ejemplo, si hacemos un select sobre una columna varchar2(100) la vista no será creada con una columna varchar2(100), sino que será creada con el maximo largo existente dentro de la columna que no necesariamente es 100, por lo mismo, para evitar posibles errores de conversión de tipos entre vistas o database link, es bueno uitlizar este tipo de solución.

Oracle SQL Developer Data Modeler ahora es libre

miércoles, octubre 13th, 2010

SQL Developer Data Modeler ofrece una herramientas de modelado de bases de datos y de servicios, incluyendo el modelado de diagramas entidad-relación (ERD), modelo relacional (diseño de base de datos), el tipo de datos y modelado multidimensional, con «roundtrip engineering» y la generación de código de DDL . Las importaciones Data Modeler y exportaciones a una variedad de destinos, ofrece además una variedad de opciones de formato y valida los modelos a través de un conjunto predefinido de reglas de diseño.

Oracle SQL Developer Data Modeler puede conectarse a cualquier base de datos Oracle y es independiente de la plataforma. Además tiene una versión de sólo lectura SQL Developer Data Modeler Viewer y también está disponible para su descarga.

Encuentra más información en https://www.oracle.com/technetwork/developer-tools/datamodeler/overview/index.html