Olá, pessoal!
Se você ainda não sabe como as triggers são construídas, dê um pulo rápido AQUI.
É possível passarmos parâmetros de nossa preferência para as triggers trabalharem esses parâmetros em suas tomadas de decisões ou outra atitude qualquer que se deseje. Para isso utilizaremos a variável TG_ARGV que fica ativa em forma de array de dados.
Para que possamos utilizar essa variável TG_ARGV, podemos armazená-la em outras variáveis dentro da nossa procedure da trigger. Para isso usamos o declare e especificamos o nome da variável seguida do tipo.
Vejamos então um exemplo completo de como fica uma trigger genérica recebendo parâmetros para uma tomada de decisões sobre qual base de dados efetuar a replicação de um registro inserido:
CREATE OR REPLACE FUNCTION replica_dados_usuario()
RETURNS trigger
AS $$
declare
base_to_exec varchar;
begin
base_to_exec := TG_ARGV[0];
if(base_to_exec = 'base1')
then --// CONECTA NA BASE1 E INSERE REGISTRO
else if(base_to_exec = 'base2')
then --// CONECTA NA BASE2 E INSERE REGISTRO
else if(base_to_exec = 'base3')
then --// CONECTA NA BASE3 E INSERE REGISTRO
end if;
return new;
end;
$$ LANGUAGE plpgsql;
CREATE TRIGGER executa_replicacao_dados_usuario
AFTER INSERT ON tb_usuarios
FOR EACH ROW EXECUTE PROCEDURE replica_dados_usuario('base1');
CREATE TRIGGER executa_replicacao_dados_usuario
AFTER INSERT ON tb_logins
FOR EACH ROW EXECUTE PROCEDURE replica_dados_usuario('base2');
CREATE TRIGGER executa_replicacao_dados_usuario
AFTER INSERT ON tb_usuarios_cargos
FOR EACH ROW EXECUTE PROCEDURE replica_dados_usuario('base3');
No exemplo acima criamos três triggers em tabelas diferentes onde, de acordo com o parâmetro, executa inserções em uma outra base de dados.
- O sinal de ":=" é uma atribuição. Utilizado apra atribuir o valor de uma variável à outra;
- Declaramos a variável base_to_exec como varchar para receber do TG_ARGV um valor do tipo texto;
- Estamos recebendo da variável TG_ARGV o valor do primeiro índice do array: TG_ARGV[0], pois estamos passando apenas um único parâmetro na criação da trigger;
No próximo post veremos como se conectar a outras bases de dados e coletar valores ou executar processos.
