Fórum Trigger Insert - De uma tabela para muitas #457433
04/10/2013
0
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
Curtir tópico
+ 0Posts
04/10/2013
Lg Embarcadero
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
04/10/2013
Deivison Melo
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
04/10/2013
Lg Embarcadero
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
04/10/2013
Deivison Melo
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
04/10/2013
Lg Embarcadero
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
04/10/2013
Deivison Melo
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
07/10/2013
Lg Embarcadero
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
Clique aqui para fazer login e interagir na Comunidade :)