Trigger Insert - De uma tabela para muitas
Tenho as tabelas Boleto, clientes, cont_receber, empresa.
Preciso que seja inserido um registro na tabela cont_receber, seja inserido na tabela Boleto alguns dados da tabela empresa (Nome, conta_bancaria, cnpj...), alguns dados da tabela Clientes (Nome_cedente, endereco_cedente, cpf....) e também dados da propria tabela cont_receber(Valor_boleto, documento ....), para assim ter os dados de um boleto.
Estou com dificuldades para gerar essa trigger, desde já agradeço a todos que ajudarem!
Preciso que seja inserido um registro na tabela cont_receber, seja inserido na tabela Boleto alguns dados da tabela empresa (Nome, conta_bancaria, cnpj...), alguns dados da tabela Clientes (Nome_cedente, endereco_cedente, cpf....) e também dados da propria tabela cont_receber(Valor_boleto, documento ....), para assim ter os dados de um boleto.
Estou com dificuldades para gerar essa trigger, desde já agradeço a todos que ajudarem!
Lg Embarcadero
Curtidas 0
Respostas
Lg Embarcadero
04/10/2013
Melhorando a pergunta:
Tenho as tabelas Boleto, clientes, cont_receber, empresa.
Preciso que quando seja inserido um registro na tabela "cont_receber", seja inserido também na tabela "Boleto" alguns dados da tabela "empresa" (Nome, conta_bancaria, cnpj...), alguns dados da tabela "Clientes" (Nome_cedente, endereco_cedente, cpf....) e também dados da propria tabela "cont_receber"(Valor_boleto, documento ....), para assim ter os dados de um boleto.
Tenho as tabelas Boleto, clientes, cont_receber, empresa.
Preciso que quando seja inserido um registro na tabela "cont_receber", seja inserido também na tabela "Boleto" alguns dados da tabela "empresa" (Nome, conta_bancaria, cnpj...), alguns dados da tabela "Clientes" (Nome_cedente, endereco_cedente, cpf....) e também dados da propria tabela "cont_receber"(Valor_boleto, documento ....), para assim ter os dados de um boleto.
GOSTEI 0
Deivison Melo
04/10/2013
Seria algo do tipo:
Abração e bons códigos!!
CREATE trigger teste_bi for country /*O pós fixo bi significa: Before Insert*/
active before insert position 0
AS
begin
/* Insert na tabela desejada, coloquei os valores fixos apenas como exemplo*/
insert into TABELAX (CODIGO, NOME)
values (1, 'EMANOEL DEIVISON');
end
Abração e bons códigos!!
GOSTEI 0
Lg Embarcadero
04/10/2013
Oi Deivison, Boa tarde!
Essa seria uma simples, mas preciso de uma que insira dados mais ou menos assim:
Ou seja, inserir dados de varias tabelas em uma só, isso quando for inserido algum dado na tabela X.
Coloquei os campos como exemplo mas assim não funciona. Saberia me falar se isso é possível e se sim, como funciona a sintaxe?
Essa seria uma simples, mas preciso de uma que insira dados mais ou menos assim:
CREATE trigger teste_bi for country /*O pós fixo bi significa: Before Insert*/
active before insert position 0
AS
begin
/* Insert na tabela desejada, coloquei o nome dos campos apenas como exemplo*/
insert into TABELAX
values (1, tabelaX.nome, tabelaY.valor, tabelaZ.data);
endOu seja, inserir dados de varias tabelas em uma só, isso quando for inserido algum dado na tabela X.
Coloquei os campos como exemplo mas assim não funciona. Saberia me falar se isso é possível e se sim, como funciona a sintaxe?
GOSTEI 0
Deivison Melo
04/10/2013
Código de uma trigger simples:
Outra:
outra:
Essa é a sintaxe correta!
Qual sua dúvida?
Está usando qual o editor de SQL que você está usando?
SET TERM ^; CREATE TRIGGER BI_ATABLE FOR ATABLE ACTIVE BEFORE INSERT POSITION 1 AS BEGIN IF (NEW.CAPTURE_DATE IS NOT NULL) THEN BEGIN NEW.CAPTURE_TIME = CAST(EXTRACT (HOUR FROM NEW.CAPTURE_DATE) AS CHAR(2))|| ':' || CAST(EXTRACT (MINUTE FROM NEW.CAPTURE_DATE) AS CHAR(2))|| ':' || CAST(EXTRACT (SECOND FROM NEW.CAPTURE_DATE) AS CHAR(7)); END END ^ SET TERM ;^
Outra:
SET TERM ^; RECREATE TRIGGER BI_ATABLE FOR ATABLE ACTIVE BEFORE INSERT POSITION 1 AS BEGIN /* do nothing */ END ^ SET TERM ;^ COMMIT;
outra:
SET TERM ^; RECREATE TRIGGER BI_ATABLE FOR ATABLE ACTIVE BEFORE INSERT POSITION 1 AS BEGIN IF (NEW.CAPTURE_DATE IS NOT NULL) THEN BEGIN NEW.CAPTURE_TIME = CAST(NEW.CAPTURE.DATE AS TIME); END END ^ SET TERM ;^ COMMIT;
Essa é a sintaxe correta!
Qual sua dúvida?
Está usando qual o editor de SQL que você está usando?
GOSTEI 0
Lg Embarcadero
04/10/2013
Certo, vou falar o problema real para melhor entendimento.
Preciso que a tabela "contas_receber" gere boletos para a tabela "boletos".
Para isso, toda vez que for inserida uma conta, quero uma trigger que dispare valores desta tabela para a tabela "boletos", so que os dados necessários para os boletos não estão somente na tabela "contas_receber", mas tem também nas tabelas "empresa" e "clientes".
Então a tabela boletos vai receber dados das tabelas "contas_receber" (que teria os valores), "clientes" (que seria os dados do sacado) e "empresa" (que seria os dados do cedente do boleto). Tudo atravez de uma trigger da tabela "contas_receber" toda vez que um registro for inserido.
Imagino que esta seria a melhor solução para o meu caso.
Isso seria possível?
Preciso que a tabela "contas_receber" gere boletos para a tabela "boletos".
Para isso, toda vez que for inserida uma conta, quero uma trigger que dispare valores desta tabela para a tabela "boletos", so que os dados necessários para os boletos não estão somente na tabela "contas_receber", mas tem também nas tabelas "empresa" e "clientes".
Então a tabela boletos vai receber dados das tabelas "contas_receber" (que teria os valores), "clientes" (que seria os dados do sacado) e "empresa" (que seria os dados do cedente do boleto). Tudo atravez de uma trigger da tabela "contas_receber" toda vez que um registro for inserido.
Imagino que esta seria a melhor solução para o meu caso.
Isso seria possível?
GOSTEI 0
Deivison Melo
04/10/2013
Sim!
Na trigger podemos utilizar várias tabelas com a utilização de joins e até mesmo union´s, e etc caso necessário!
Aqui na empresa temos trigger enormes!
Trigger´s com mais de 1.000 linhas de código!
Recomendo que confeccione uma procedure que será populada através dessa trigger e com isso irá gerar o boleto!
Na trigger podemos utilizar várias tabelas com a utilização de joins e até mesmo union´s, e etc caso necessário!
Aqui na empresa temos trigger enormes!
Trigger´s com mais de 1.000 linhas de código!
Recomendo que confeccione uma procedure que será populada através dessa trigger e com isso irá gerar o boleto!
GOSTEI 0
Lg Embarcadero
04/10/2013
Oi Deivison!
Consegui resolver de uma outra maneira, com a mesma sintaxe mas fazendo de outra forma.
Postando aqui so pra conhecimento da turma:
Muito obrigado pela prontidão em ajudar.
Té+
Consegui resolver de uma outra maneira, com a mesma sintaxe mas fazendo de outra forma.
Postando aqui so pra conhecimento da turma:
Insert into tabela (campo_1,campo_n) Select tabela1.campo_a, tabela2.campo_b from tabela1, tabela2;
Muito obrigado pela prontidão em ajudar.
Té+
GOSTEI 0