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:
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á

* 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á

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.
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
-- 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;
/
/
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:
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