Jump to content
gmadeira

Trigger

Recommended Posts

Boa tarde,

 

Tenho a seguinte tabela:

 

CREATE TABLE prodvdedor (
codPrdvdor int(10) NOT NULL AUTO_INCREMENT,
codVendedor int(11) NOT NULL,
codTecido int(11) NOT NULL,
codCor int(11) NOT NULL,
medida decimal(10,2) DEFAULT NULL,
stockMedidas decimal(10,2) DEFAULT NULL,
peso decimal(10,4) DEFAULT NULL,
stockPeso decimal(10,4) DEFAULT NULL,
dataCompra date NOT NULL,
valor decimal(10,2) NOT NULL,
PRIMARY KEY (codPrdvdor),
KEY PK_prodvdedor_vendededor_idx (codVendedor),
KEY Pk_prodvdedor_tecidos_idx (codTecido),
KEY Pk_prodvdedor_cores_idx (codCor),
CONSTRAINT Pk_prodvdedor_cores FOREIGN KEY (codCor) REFERENCES cores (codCor) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT Pk_prodvdedor_tecidos FOREIGN KEY (codTecido) REFERENCES tecidos (codTecido) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT PK_prodvdedor_vendedores FOREIGN KEY (codVendedor) REFERENCES vendedores(codVendedor) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;Pciso criar uma trigger 

 

preciso criar uma trigger para atualizar os campos stockMedidas e stockPeso, quando digito os dados ela procura se tem outra informação com os campos pedidos e atualiza, fiz da seguinte maneira:

 

CREATE DEFINER=`root`@`localhost` TRIGGER `bailledados`.`trg_AtualizarProdVendor` BEFORE INSERT ON `prodvdedor` FOR EACH ROW
BEGIN     
    SET @stockAntigo = (SELECT stockMedidas FROM prodvdedor WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor);
    UPDATE prodvdedor
    SET stockMedidas=@stockAntigo+new.medida WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor;
    
    SET @stockAntigo1 = (SELECT stockPeso FROM prodvdedor WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor);
    UPDATE prodvdedor
    SET stockPeso=@stockAntigo1+new.peso WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor;
    
    SET @valorAntigo = (SELECT valor FROM prodvdedor WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor);
    UPDATE prodvdedor
    SET valor=@valorAntigo1+new.valor WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor;
END

 Só que não funciona da erro:

 

insert 
    into
        bailledados.prodvdedor
        (codCor, codTecido, codVendedor, medida, stockMedidas, peso, stockPeso, dataCompra, valor) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?)
WARN:   SQL Error: 1442, SQLState: HY000
ERROR:   Can't update table 'prodvdedor' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Informações:   could not execute statement

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By mateus.andriollo
      Gostaria de saber se alguém tem uma trigger para fazer log de qualquer tipo de transação de dados em qualquer tabela do banco. Porém, preciso carregar um campo UserName que será setado a cada conexão via login php
      SET @UserName = 'ZeBala' Achei vários exemplos porém tenho q criar um trigger para cada tabela
       
      CREATE TRIGGER roles_audit_au AFTER UPDATE ON `<nome_tabela>` Existe uma forma de não ser direcionada?
    • By gcors88
      Prezados, desenvolvi um gatilho onde este tem comunicação com outra tabela, uma é a coleta_sinal_vital, e onde o gatilho foi criado é na table  itcoleta_sinal_vital ( esta possui uma fk da primeira), a questão é que dentro do gatilho realizo um select na primeira tabela para consultar o valor inserido em uma coluna da primeira tabela, faço essa consulta baseada nessa fk que esta sendo inserida ou seja where = :new.cd_coleta_sinal_vital, a questão é que no momento em que esse select é executado ele não retorna dado nenhum, acredito que isto ocorre porque a inserção em ambas as tabelas é feito de forma simultânea, pois se comparado posteriormente o valor da coluna sempre é inserido, gostaria de saber se existe alguma forma de aplicar uma espera ou atraso neste gatilho para que ele possa capturar este valor sem problemas, grato!
    • By José Peixoto
      Olá,
       
      há alguma forma de fazer uma trigger só ser executada depois que a outra executar? 
       
      Por exemplo: a trigger2 só é disparada quando a trigger1 fizer o commit das informações.
       
      Obrigado desde já :)
    • By pablwo
      CREATE TABLE FUNCIONARIO( MATRICULA NUMBER PRIMARY KEY, NOME VARCHAR2(100) ); CREATE TABLE DEPENDENTE( CPF VARCHAR2(14) PRIMARY KEY, NOME VARCHAR2(100), MATRICULA_FUNCIONARIO NUMBER, CONSTRAINT fk_dependente_matricula FOREIGN KEY (matricula_funcionario) REFERENCES FUNCIONARIO(matricula) ); CREATE OR REPLACE TRIGGER QUANTIDADE_DE_DEPENDENTE BEFORE INSERT OR UPDATE ON DEPENDENTE FOR EACH ROW BEGIN IF:NEW.MATRICULA_FUNCIONARIO IN (SELECT MATRICULA_FUNCIONARIO FROM DEPENDENTE HAVING COUNT(MATRICULA_FUNCIONARIO) >= 3 GROUP BY MATRICULA_FUNCIONARIO) THEN RAISE_APPLICATION_ERROR(-20000, 'Funcionario Excedeu a Quantidade de Dependentes'); END IF; END; Boa noite, estou com dificuldades em criar triggers no sql oracle. Minha dificuldade é criar um trigger que so permita que um funcionario tenha no maximo 3 dependetes, acredito que o erro seja no select dentro do if, quando eu troco por valores como (1,2,3) esses valores servem como matriculas de funcionários que não é mais permitido adicionar dependentes.
    • By RVenancio
      Fiz uma trigger pra atualizar o valor do salário montante de uma agencia de banco usando o seguinte código:
       
      CREATE DEFINER = CURRENT_USER TRIGGER `NB`.`Funcionario_AFTER_INSERT` AFTER INSERT ON `Funcionario` FOR EACH ROW
      BEGIN
       
      UPDATE agencia a SET salarioMont = (SELECT SUM(salario) FROM funcionario f WHERE f.idAg = a.idAgencia)
      WHERE a.idAgencia = new.idAg;
       
      END
       
      o problema em si é que estou obtendo o erro: "Error Code: 1054. Unknown column 'idAg' in 'NEW'" quando vou executar o scritp.
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.