Fórum Ajuda em Trigger - Campos Dinamicos para passar no OLD E NEW #430903
12/12/2012
0
SET TERM !;
CREATE TRIGGER LOOP_ADD_REGISTROS FOR TABELA
ACTIVE AFTER INSERT POSITION 32767
AS
DECLARE VARIABLE NOMECAMPO VARCHAR(15);
BEGIN
FOR SELECT f.rdb$field_name -- Select para retornar todos os campos da tabela
FROM rdb$relation_fields f
JOIN rdb$relations r on f.rdb$relation_name = r.rdb$relation_name
AND r.rdb$view_blr is null
AND (r.rdb$system_flag is null or r.rdb$system_flag = 0)
WHERE f.rdb$relation_name = ''TABELA''
INTO :NOMECAMPO
DO
BEGIN
IF ( ( NEW.?????? ) IS NOT NULL ) THEN -- Aqui gostaria de passar o valor do campo que esta posicionado a trigger, mas o campo que está na variável :NOMECAMPO.
EXECUTE PROCEDURE P_INSERT_REGISTROS( ''TABELA'', :NOMECAMPO, NEW.?????? );
END
END;
SET TERM; !
Timuio
Curtir tópico
+ 0Posts
12/12/2012
Claudia Nogueira
Esse ''TABELA'' seria um parâmetro externo?
Não tem como passar um parâmetro externo pra um trigger que eu saiba.
O que dá pra fazer é em cada trigger de cada tabela que é executado depois do INSERT, UPDATE ou DELETE chamar a procedure passando os parâmetros.
Vamos ver se mais alguém tem alguma ideia.
Gostei + 0
12/12/2012
Timuio
create table PESSOAS(
ID
NOME
IDADE
);
Só que na trigger criada ao inves de passar os campos
dentro do
BEGIN
IF ( ( NEW.ID ) IS NOT NULL ) THEN
EXECUTE PROCEDURE P_INSERT_REGISTROS( 'PESSOAS', 'ID', NEW.ID );
END
gostaria de passar o campo que está salvo na variavel :NOMECAMPO retornado do FOR SELECT dos campos.
BEGIN
IF ( ( NEW.:NOMECAMPO ) IS NOT NULL ) THEN
EXECUTE PROCEDURE P_INSERT_REGISTROS( 'PESSOAS', :NOMECAMPO, NEW.:NOMECAMPO );
END
Só que não consigo ter valores para estas variáveis de transições( NEW.????? ou OLD.????? ) com o campo que está em :NOMECAMPO
Gostei + 0
12/12/2012
Claudia Nogueira
Isso muitos que trabalham com Firebird gostariam de fazer, porém não dá, pelo menos eu nunca consegui.
Tem que passar campo por campo mesmo, NEW.ID, NEW.NOME e etc.
Gostei + 0
13/12/2012
Timuio
Vou tentar de outra maneira, pois acho muito trabalhoso criar para cada campo.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)