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.