Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

vantagem de usar um gatilho para preencher a chave substituta no oracle plsql


Esse padrão específico é realmente muito perigoso, pois permite que alguém insira manualmente um novo ID que pode colidir com uma chave substituta já existente ou uma que sua sequência possa gerar no futuro.

Seu gatilho realmente deve ficar assim para garantir que para cada novo registro receba uma chave única. Se você estiver usando 11.2 ou superior, não há necessidade de select ... into ...
CREATE OR REPLACE TRIGGER TEST_TRIG
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
   :new.column1 := my_table_seq.NEXTVAL;
END;

A vantagem dessa abordagem é que ela sempre feito. Qualquer valor que alguém coloque nessa coluna será substituído por algo que funcionará e que usará a sequência correta; se alguém esquecer de adicioná-lo na instrução ainda funcionará.

Isso torna impossível quebrar sua chave substituta.

Com o que você sugere, imagine que alguém coloque um 1 em vez disso; você obtém uma violação de chave primária. Se alguém esquece, então há mais erros. Você nunca garantirá que todas as atualizações da sua tabela serão feitas por meio de um único ponto de entrada, portanto, o gatilho garante que o PK seja preenchido corretamente.

Vale a pena notar que a partir de 12c você pode usar uma identidade coluna , que torna explícito o vínculo entre tabela e incremento automático; não há necessidade de um gatilho ou uma sequência. A sintaxe para a DDL de criação da tabela seria:
create table <table_name> ( <column_name> generated as identity );