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

Oracle após gatilho de atualização criando link de banco de dados público


Criar um link de banco de dados em tempo real parece uma coisa incomum de se fazer; seu esquema geralmente deve ser estático e estável. No entanto, se você precisar, seria mais simples envolver a atualização e o link em um procedimento, ou apenas emitir duas instruções - presumivelmente, o que quer que execute a atualização seja razoavelmente controlado de qualquer maneira, caso contrário, você teria que lidar com várias pessoas acionando esse múltiplo vezes, o que seria ainda mais confuso.

Você provavelmente pode fazer isso funcionar adicionando PRAGMA autonomous_transaction; ao seu acionador, conforme demonstrado para um problema semelhante (criar uma visualização em vez de um link) nesta resposta , mas não estou em condições de testar isso no momento.
create or replace
TRIGGER CreateLinkTrigger
after UPDATE of Year ON tableInit 
for each row
DECLARE
    add_link VARCHAR2(200);
    PRAGMA autonomous_transaction;
BEGIN
    ...

Você também pode fazer com que o gatilho envie um trabalho assíncrono para executar o DDL, conforme descrito nesta resposta , e há mais um exemplo nesta resposta , onde você alteraria o bloco anônimo do trabalho para fazer seu execute immediate .

Provavelmente seria melhor apenas criar os links para os próximos anos com antecedência durante uma janela de manutenção, ou em uma programação, ou a partir de um procedimento; em vez de tentar associar uma alteração de esquema a uma alteração de dados.