sql >> Base de Datos >  >> RDS >> Oracle

ventaja de usar un activador para completar la clave sustituta en Oracle plsql

Este patrón en particular es bastante peligroso, ya que permite que alguien ingrese manualmente una nueva ID que podría entrar en conflicto con una clave sustituta ya existente o una que su secuencia podría generar en el futuro.

Su disparador realmente debería verse así para garantizar que para cada nuevo registro obtenga una clave única. Si está utilizando 11.2 o superior, no es necesario select ... into ...

CREATE OR REPLACE TRIGGER TEST_TRIG
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
   :new.column1 := my_table_seq.NEXTVAL;
END;

La ventaja de este enfoque es que siempre hecho. Cualquier valor que alguien ingrese para esta columna se sobrescribe con algo que funcionará y que usa la secuencia correcta; si alguien olvida agregarlo en la declaración, seguirá funcionando.

Hace que sea imposible descifrar su clave sustituta.

Con lo que sugieres, imagina que alguien coloca un 1 en su lugar; obtiene una violación de clave principal. Si alguien se olvida, entonces hay más errores. Nunca garantizará que cada actualización de su tabla se realice a través de un único punto de entrada, por lo que el disparador garantiza que el PK se complete correctamente.

Vale la pena señalar que desde 12c puede usar una identidad columna , que hace explícito el vínculo entre la tabla y el autoincremento; no hay necesidad de un disparador o una secuencia. La sintaxis para el DDL de creación de tablas sería:

create table <table_name> ( <column_name> generated as identity );