viernes, 5 de abril de 2013

Crear campo autonumérico en Oracle con Power Designer



Crear Campos Autonuméricos En ORACLE - POWER DESIGNER

Para poder crear campos autonúmericos, es decir, campos que se autoincrementen automáticamente al insertar un registro, es necesario utilizar secuencias o sequence, ya que en Oracle no existen los campos del tipo "autonumérico".
En Power Designer al crear una secuencia en una llave primaria esta automáticamente crea el Trigger o Disparador, que se encarga de asignar la secuencia al crear un registro.
Para lograrlo realizamos los siguientes pasos:




1.       Abrir la tabla, y seleccionar la llave primaria, en la pestaña Colums
2.       Clic en Properties, o dar doble click en id_prueba(llave primaria)
3.       En la ventana Column Properties, pestaña General,


4.       Click en Create


5.       Escribir el nombre de la secuencia: SQ_PRUEBA
6.       Llenar la información básica de la secuencia
*    La secuencia iniciará en el valor 1
*    Incrementara en 1
*    El parámetro CYCLE, indicará que cuando la secuencia llegue a su valor máximo (max value), esta vuelva a empezar, si por el contrario, usamos NOCYCLE esto no ocurrirá

7.       En la pestaña Preview muestra el SQL generado para la secuencia

8.       Además después de crear una SECUENCIA para una llave primaria, POWER DESIGNER crea automáticamente un TRIGGER, que se encarga de asignar el valor de la secuencia, cada que se ingrese un registro.
Este se puede ver en la pestaña Triggers en la tabla.


9.       Para poder ver el SQL generado, damos click en la pestaña Preview en la tabla, en mi caso Tblprueba.


10.   Probemos la efectividad de la secuencia y el trigger.

            Al ejecutar el SCRIPT antes de crear la secuencia y el trigger:
     INSERT INTO TBLPRUEBA (CODIGO, DESCRIPCION)
           
VALUES ('COD4', 'DES4');

           Genera el siguiente error:



Error que empieza en la línea 2 del comando:

INSERT INTO TBLPRUEBA (CODIGO, DESCRIPCION) VALUES ('COD4', 'DES4')

Informe de error:

Error SQL: ORA-01400: no se puede realizar una inserción NULL en ("AGENDA"."TBLPRUEBA"."ID_PRUEBA")

01400. 00000 -  "cannot insert NULL into (%s)"

*Cause:   

*Action:

 








           




Este error es generado porque la llave principal ID_PRUEBA no debe ser NULL.


11.   Después de crear la Secuencia y el Trigger:

--  SECUENCIA O SEQUENCE
create sequence SQ_PRUEBA
     increment by 1
     start with 1
     nocycle;


--  este TRIGGER o DISPARADOR se ejecuta antes de insertar un nuevo registro a la tabla TBLPRUEBA
create
trigger TIB_TBLPRUEBA before insert
on TBLPRUEBA for each row
declare
    integrity_error  exception;
    errno            integer;
    errmsg           char(200);
    dummy            integer;
    found            boolean;

begin
    --  consulta el valor de la SECUENCIA: SQ_PRUEBA y lo asigna al campo ID_PRUEBA del nuevo registro
    select SQ_PRUEBA.NEXTVAL INTO :new.ID_PRUEBA from dual;

exception
    when integrity_error then
       raise_application_error(errno, errmsg);
end;
/



Ejecutamos el mismo SCRIPT:
INSERT INTO TBLPRUEBA (CODIGO, DESCRIPCION)
    VALUES ('COD4', 'DES4');


12.   Consultando los valores de la secuencia:
Valor actual:
SELECT sq_prueba.currval FROM DUAL;

Siguiente valor:

SELECT sq_prueba.nextval FROM DUAL;




Aqui les dejo un video con el mismo proceso:



Espero les haya sido útil!!

No hay comentarios:

Publicar un comentario