Jump to content

Search the Community

Showing results for tags 'trigger'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Q&A Desenvolvimento
    • Perguntas e respostas rápidas
  • Desenvolvimento e Banco de Dados
    • HTML e CSS
    • Java
    • Javascript
    • .NET
    • PHP
    • Python
    • Ruby
    • Mobile
    • Ambientes de Desenvolvimento
    • Arquitetura e Métodos Ágeis
    • Banco de Dados
    • DevOps
    • Desenvolvimento de Games
    • E-Commerce e Pagamentos Online
    • SEO e Otimizações
    • WordPress
    • Algoritmos & Outras Tecnologias
  • Design e Produto
    • Fotografia
    • Photoshop
    • Design de interfaces e UX
    • Edição/Produção de Vídeos
    • Marketing Online
    • Desenho, Ilustração e 3D
  • Entretenimento e uso pessoal
    • Geral
    • Segurança & Malwares
    • Gadgets e wearable
    • Softwares e Apps
    • Entretenimento

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Google+


Hangouts


Skype


Twitter


deviantART


Github


Flickr


LinkedIn


Pinterest


Facebook


Site Pessoal


Localização


Interesses

Found 31 results

  1. Ola, ja começo pedindo desculpa por mais esse tópico, mas eu realmente não consegui achar nada que me ajudasse. Eu preciso criar uma trigger ou qualquer outro procedimento, que me permite incluir todos os dados da tabela principal na tabela histórico a cada alteração/inserção. Está é a trigger que tenho, ela só me retorna o dado alterado/inserido. FOR UPDATE, INSERT AS BEGIN SET NOCOUNT ON INSERT INTO tb_historico (id_beneficio, habitantes, ano, dh_update) SELECT id_beneficio, habitantes, ano, GETDATE() FROM INSERTED END O dados na minha tabela são os seguintes: id habitante ano1 10000 20192 20000 20193 30000 2019Alterei a primeira linha id habitante ano1 50000 20192 20000 20193 30000 2019preciso que além do dado alterado, me retorne os dados que não sofreram nenhuma modificação id habitante ano 1 50000 20192 20000 20193 30000 2019Hoje o retorno dela seria apenas o dado alterado. id habitante ano1 50000 2019
  2. Felipe_N22

    Rotina DELETE MySQL

    Pessoal, como que eu crio uma rotina no MySQL para efetuar delete de registros inseridos nos últimos 30 dias, e fazer com que esse procedimento rode todos os dias automaticamente em determinado horário?
  3. Angelo_Pacheco

    Trigger para atualizar campo depois de update

    Olá Pessoal! Faz tempo que não trabalho com BD e trigger e estou retornando. Estou com a seguinte situação Tenho 2 tabelas: glpi_tickets e glpi_plugin_fields_ticketoramentos Dentro do formulario ticket (tabela glpi_tickets) criei um campo otimizado chamado reprovado (tabela glpi_plugin_fields_ticketoramentos) A tabela glpi_plugin_fields_ticketoramentos se relaciona com glpi_tickets A situação é que se o usuario reprova o ticket, o mesmo terá de ser fechado. Estou montando a trigger CREATE TRIGGER TRG_fechaChamado AFTER UPDATE ON glpi_tickets FOR each row BEGIN SELECT g.reprovadofield into @repro FROM glpi_tickets t, glpi_plugin_fields_ticketoramentos g WHERE t.id = g.items_id AND g.reprovadofield = 0 AND t.id = ???? if @repro = 0 THEN UPDATE glpi_tickets SET status = 6 WHERE id ???? END IF; END; Não estou conseguindo pegar o id do ticket a ser analisado para fechamento. Podem me ajudar??
  4. sidneypsoares

    Problemas com Trigger

    Pessoal, Sou novo em trigger, agradeceria sua ajuda. Tenho um banco de dados de consumo de cliente. Acontece que quando vou inserir nova leitura para o cliente ele deve calcular o consumo atual. Mas acontece que pode haver uma virada na medição, ou seja, a leitura anterior está em 9999 e agora está 1, ele deve prever isso. Assim criei essa trigger:Gatilhos `historico` -- DELIMITER $$ CREATE TRIGGER `consumo_atual` BEFORE INSERT ON `historico` FOR EACH ROW BEGIN DECLARE leitura_anterior int(5); DECLARE tempo int(5); SET leitura_anterior = (SELECT L.tb_leitura FROM historico L WHERE L.tb_instalacao=NEW.tb_instalacao ORDER BY L.tb_data DESC LIMIT 1); SET tempo = (SELECT DATEDIFF( CURRENT_DATE(),L.tb_data) AS valor FROM historico L WHERE L.tb_instalacao=NEW.tb_instalacao ORDER BY L.tb_data DESC LIMIT 1); IF (leitura_anterior <> '' ) THEN IF (NEW.tb_leitura > 0 and tempo >=1 and tempo <=30) THEN IF (NEW.tb_op = 1) THEN CASE WHEN (NEW.tb_diais= '4' AND leitura_anterior > NEW.tb_leitura AND leitura_anterior >= 9000) THEN SET NEW.tb_consumo = ((NEW.tb_leitura - leitura_anterior) + 10000) * NEW.tb_const, NEW.tb_cod = '137'; WHEN (NEW.tb_diais= '5' AND leitura_anterior > NEW.tb_leitura AND leitura_anterior >= 90000) THEN SET NEW.tb_consumo = ((NEW.tb_leitura - leitura_anterior) + 100000) * NEW.tb_const, NEW.tb_cod ='137'; WHEN (NEW.tb_diais= '6' AND leitura_anterior > NEW.tb_leitura AND leitura_anterior >=900000) THEN SET NEW.tb_consumo = ((NEW.tb_leitura - leitura_anterior) + 1000000) * NEW.tb_const, NEW.tb_cod ='137'; ELSE BEGIN SET NEW.tb_consumo = (NEW.tb_leitura - leitura_anterior) * NEW.tb_const; END; END CASE; ELSE SET NEW.tb_consumo = 0; END IF; ELSE SET NEW.tb_consumo = 0; END IF; ELSE SET NEW.tb_consumo =NEW.tb_leitura * NEW.tb_const; END IF; END $$ DELIMITER ; Essa é a estrutura do banco: Estrutura para tabela `historico` -- CREATE TABLE `historico` ( `tb_id` int(11) NOT NULL, `tb_instalacao` varchar(10) NOT NULL, `tb_reg` char(3) NOT NULL, `tb_unidade` varchar(8) NOT NULL, `tb_local` varchar(4) NOT NULL, `tb_razao` varchar(2) NOT NULL, `tb_data` date NOT NULL, `tb_adm` int(11) NOT NULL, `tb_contrato` varchar(10) NOT NULL, `tb_leitura` int(5) NOT NULL, `tb_cod` varchar(4) DEFAULT NULL, `tb_mat` int(11) DEFAULT NULL, `tb_sgl` int(5) DEFAULT NULL, `tb_subsigla` int(5) DEFAULT NULL, `tb_op` int(11) NOT NULL DEFAULT '0', `tb_consumo` float DEFAULT NULL, `tb_provavel` int(6) DEFAULT NULL, `tb_minima` int(6) DEFAULT NULL, `tb_faturada` int(6) DEFAULT NULL, `tb_acerto` int(6) DEFAULT NULL, `tb_obs` varchar(150) DEFAULT NULL, `tb_f1` char(1) DEFAULT NULL, `tb_f2` char(1) DEFAULT NULL, `tb_f3` char(1) DEFAULT NULL, `tb_ver` char(1) NOT NULL DEFAULT 'N', `tb_seq` int(5) DEFAULT NULL, `tb_seqdig` int(11) DEFAULT NULL, `tb_A02` varchar(3) DEFAULT NULL, `tb_nome` varchar(50) DEFAULT NULL, `tb_medidor` varchar(12) NOT NULL, `tb_diais` varchar(3) NOT NULL, `tb_const` int(5) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; E esse é o registro: INSERT INTO `historico` ( `tb_instalacao`, `tb_reg`, `tb_unidade`, `tb_local`, `tb_razao`, `tb_data`, `tb_adm`, `tb_contrato`, `tb_leitura`, `tb_cod`, `tb_mat`, `tb_sgl`, `tb_subsigla`, `tb_op`, `tb_consumo`, `tb_provavel`, `tb_minima`, `tb_faturada`, `tb_acerto`, `tb_obs`, `tb_f1`, `tb_f2`, `tb_f3`, `tb_ver`, `tb_seq`, `tb_seqdig`, `tb_A02`, `tb_nome`, `tb_medidor`, `tb_diais`, `tb_const`) VALUES ('3013639052', '03', '01330101', '3301', '01', '2019-05-01', 1, '4680005077', 90001, '1801', 0, 0, NULL, 1, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'N', 1, 1, NULL, 'SIDNEY PORTELA SOARES', 'APC099037055', '5', 1); COMMIT; INSERT INTO `historico` ( `tb_instalacao`, `tb_reg`, `tb_unidade`, `tb_local`, `tb_razao`, `tb_data`, `tb_adm`, `tb_contrato`, `tb_leitura`, `tb_cod`, `tb_mat`, `tb_sgl`, `tb_subsigla`, `tb_op`, `tb_provavel`, `tb_minima`, `tb_faturada`, `tb_acerto`, `tb_obs`, `tb_f1`, `tb_f2`, `tb_f3`, `tb_ver`, `tb_seq`, `tb_seqdig`, `tb_A02`, `tb_nome`, `tb_medidor`, `tb_diais`, `tb_const`) VALUES ('3013639052', '03', '01330101', '3301', '01', '2019-06-01', 1, '4680005077', 7, '1801', 0, 0, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'N', 1, 1, NULL, 'SIDNEY PORTELA SOARES', 'APC099037055', '5', 1); COMMIT; Observe que a leitura do cliente em 2019-05-01 foi 90001 e em 2019-05-01 foi 7 e como o campo tb_diais é 5 houve uma virada na medição então o CASE deveria aceitar o calculo : WHEN (NEW.tb_diais= '5' AND leitura_anterior > NEW.tb_leitura AND leitura_anterior >= 90000) THEN SET NEW.tb_consumo = ((NEW.tb_leitura - leitura_anterior) + 100000) * NEW.tb_const, NEW.tb_cod ='137'; Mas justamente não está fazendo, ele apenas coloca no consumo o valor 0. Alguém poderia me ajudar?
  5. eu tenho uma tabela funcionário com uma coluna salário e criei uma nova coluna do tipo salário eu pensei em uma trigger para que todas as vezes que um funcionário receba um aumento, nessa nova coluna seja registrada a quantia do último aumento recebido mas quando executo o update da erro; outra duvida dentro do update como o update sabe que é só deste funcionario? o que colocar na clausula where dentro da trigger? CREATE OR REPLACE TRIGGER new_salario_emp BEFORE UPDATE ON emp FOR EACH ROW -- DECLARE salario number; BEGIN salario := :new.sal - :OLD.sal; -- update emp set old_salario = salario; commit; -- END;
  6. Tenho uma tabela de cadastro do SQL Server, tenho uma coluna que apresenta o status desse cadastro ('A','I','S','C'). Criei um campo com nome Update_data, que receberá um datatime toda vez que o cliente alterar o status do cadastro. Isso também vale para um insert. Estou com dúvidas, pois nunca criei uma Trigger em sql server. Ex: da minha tabela ID | Processo | status | Update_data 1 | A33 | A | null 2 | A34 | I | null 3 | A55 | A | null Não consegui avançar no seguinte exemplo abaixo trigger: CREATE TRIGGER atualizaData ON cadastro AFTER INSERT,UPDATE AS IF INSERT OR UPDATE(status) BEGIN UPDATE cadastro SET Update_data = GETDATE() WHERE id = id_que_foi_modifica/inserida END Ao final, será atualizado com a data atual somente se houver modificação ou inserção no campo da situação.
  7. gmadeira

    Triggers

    Boa tarde, tenho 2 tabelas "prodvdarm" que cadastro produtos de ema empresa com: codVendedor - int, codArmar - int, quantidade int, valor - numeric 12,2, dataentra - data tabela "entradarm" codVendedor - int, codArmar - int, quantidade int, valor - numeric 12,2, Conheço pouco de triggers então pelos exemplos tentei fazer esta que te enviei, preciso de uma para entrar com os dados checar se existe este código vendedor e código armarinho, existindo atualiza(update) a quantidade e o valor - se não existir entra com novos dados(insert) fia assim mais ta dando erro CREATE DEFINER=`root`@`localhost` TRIGGER `bailledados`.`trg_entradarm_entrada` BEFORE INSERT ON `entradarm` FOR EACH ROW BEGIN declare codVendedor int; declare codArmar int; select codVendedor codArmar from prodvdmat; IF (codVendedor <> new.codVendedor and codArmar <> new.codArmar) then insert into prodvdmat(codVendedor, codArmar, quantidade, valor, datacompra) values (new.codVendedor, new.codArmar, new.quantidade, new.valor, now()); else UPDATE prodvdmat SET quantidade = quantidade + new.Quantidade, valor = valor + new.valor WHERE codVendedor = new.codVendedor and codArmar = new.codArmar; end if; END
  8. gmadeira

    Trigger

    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
  9. Leandro de Jesus

    IF's na Trigger

    Senhores muito boa noite, Eu tenho o seguinte funcionando: IF(OLD.idDepartamentos <> NEW.idDepartamentos) THEN INSERT INTO px_pedidos_log (idPedido, campo, valor_novo, valor_antigo ) values (NEW.id, 'idDepartamentos', NEW.idDepartamentos, OLD.idDepartamentos ); END IF Eu queria fazer isso com mais campos na mesma trigger. Tentei abaixo e dá erro. Alguma luz para fazer isso ? Preciso fazer isso com 6 campos. IF(OLD.idDepartamentos <> NEW.idDepartamentos) THEN INSERT INTO px_pedidos_log (idPedido, campo, valor_novo, valor_antigo ) values (NEW.id, 'idDepartamentos', NEW.idDepartamentos, OLD.idDepartamentos ); END IF; IF(OLD.idAcao <> NEW.idAcao) THEN INSERT INTO px_pedidos_log (idPedido, campo, valor_novo, valor_antigo ) values (NEW.id, 'idAcao', NEW.idAcao, OLD.idAcao ); END IF;
  10. Leandro de Jesus

    Comparar campos após o Trigger

    Senhores muito boa tarde, Preciso de uma luz. Depois de executar o trigger Preciso comparar os campos de duas tabelas Então após atualizar a tabela px_pedidos eu pego os dados e coloco px_pedidos_log e depois preciso comparar os campos O código abaixo funciona, só não consigo comparar. DROP TRIGGER IF EXISTS `LogPedido`; CREATE DEFINER=`root`@`localhost` TRIGGER `LogPedido` BEFORE UPDATE ON `px_pedidos` FOR EACH ROW insert into px_pedidos_log select * from px_pedidos WHERE id=NEW.id Logo após tentei e não foi IF(NEW.campo != OLD.campo) THEN UPDATE px_pedidos SET alteracoes +=1 WHERE id=NEW.id; END IF; Alguém pode me dar um caminho ? Já rodei a internet mas não estou conseguindo implantar isso. Abs e obrigado
  11. brunonative

    Trigger de Acordo com Data e Hora

    Bom dia pessoal! Estou passando um sufoco aqui na criação de um sistema. É o seguinte, existem 5 tabelas: Membros | Objetivos | Email | Perguntas | Respostas O Administrador cadastra os membros, cria o email (dentro do sistema tem um editor WYSIWYG), perguntas e respostas. O administrador na hora de fazer o cadastro ou edição do membro, ele diz qual vai ser o próximo objetivo, qual email vai ser enviado, qual a pergunta que vai junto com o email e qual reposta .. junto com a edição vem A DATA E A HORA PRA ISSO ACONTECER. A dúvida é a seguinte: Como crio um Trigger para enviar o email criado naquela determinada data e hora?
  12. Olá, quando tento executar a trigger abaixo, ele me retorna Erro(56,16): PLS-00306: wrong number or types of arguments in call to '||' create or replace TRIGGER API_SIM_PF_ATUALIZA_DENTALIS BEFORE INSERT OR UPDATE ON PESSOA_FISICA FOR EACH ROW DECLARE type t_num is table of number; DS_EMAIL_W t_num; TELEFONE_RES_W t_num; TELEFONE_COM_W t_num; ESTADO_CIVIL_W VARCHAR2(255); ENDERECO_RES_W t_num; NUMERO_W t_num; BAIRRO_RES_W t_num; COMPLEMENTO_RES_W t_num; CIDADE_RES_W t_num; CEP_RES_W t_num; ENDERECO_COM_W t_num; NUMERO_COM_W t_num; BAIRRO_COM_W t_num; COMPLEMENTO_COM_W t_num; CIDADE_COM_W t_num; CEP_COM_W t_num; PROFISSIONAL_W VARCHAR2(255); SEXO_W VARCHAR2(255); DT_NASCIMENTO_W t_num; BEGIN SELECT DISTINCT CP.DS_EMAIL, ('('||nr_ddd_telefone||')'||nr_telefone), ('('||nr_ddd_telefone||')'||nr_telefone), (SELECT CP1.DS_ENDERECO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.NR_ENDERECO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.DS_BAIRRO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.DS_COMPLEMENTO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.DS_MUNICIPIO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.CD_CEP FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), TO_CHAR(:NEW.DT_NASCIMENTO,'"YYYY-MM-DD HH24:MI:SS') BULK COLLECT INTO DS_EMAIL_W,TELEFONE_RES_W,TELEFONE_COM_W,ENDERECO_RES_W,NUMERO_W,BAIRRO_RES_W,COMPLEMENTO_RES_W,CIDADE_RES_W,CEP_RES_W,/*ENDERECO_COM_W,NUMERO_COM_W,BAIRRO_COM_W,COMPLEMENTO_COM_W, CIDADE_COM_W,CEP_COM_W,*/DT_NASCIMENTO_W FROM TASY.COMPL_PESSOA_FISICA CP WHERE CP.CD_PESSOA_FISICA =:NEW.CD_PESSOA_FISICA AND CP.IE_TIPO_COMPLEMENTO = 1; SELECT V.DS_VALOR_DOMINIO INTO ESTADO_CIVIL_W FROM VALOR_DOMINIO V WHERE CD_DOMINIO = 5 AND V.VL_DOMINIO = :NEW.IE_ESTADO_CIVIL; SELECT CA.DS_CARGO INTO PROFISSIONAL_W FROM CARGO CA WHERE CA.CD_CARGO = :NEW.CD_CARGO; SELECT V.DS_VALOR_DOMINIO INTO SEXO_W FROM VALOR_DOMINIO V WHERE CD_DOMINIO = 4 AND V.VL_DOMINIO = :NEW.IE_SEXO; BEGIN SEND_DB_REQUST_PROC ('http://628186fc.ngrok.io/DentalisIntegration-1.0.0/dentalis/createuser', '{ "nome":' || :NEW.NM_PESSOA_FISICA ||','|| '"codigo_externo":' || :NEW.CD_PESSOA_FISICA ||','|| '"codigo_plano":' || 694 ||','|| '"matricula":' || :NEW.CD_PESSOA_FISICA || ',' || '"cpf":' || :NEW.NR_CPF ||','|| '"rg":' || :NEW.NR_IDENTIDADE || ',' || '"email":' || DS_EMAIL_W || ',' || '"telefone_res":' || TELEFONE_RES_W ||','|| '"telefone_com":' || TELEFONE_COM_W || ',' || '"celular":' || :NEW.NR_TELEFONE_CELULAR || ',' || '"observacao":' || :NEW.DS_OBSERVACAO || ',' || '"estado_civil":' || ESTADO_CIVIL_W || ',' || '"profissao":' || PROFISSIONAL_W || ',' || '"sexo":' || SEXO_W || ',' || '"data_nascimento":' || DT_NASCIMENTO_W || ',' || '"endereco_res":' || ENDERECO_RES_W || ',' || '"numero_res":' || NUMERO_W || ',' || '"bairro_res":' || BAIRRO_RES_W || ',' || '"complemento_res":' || COMPLEMENTO_RES_W || ',' || '"cidade_res":' || CIDADE_RES_W || ',' || '"cep_res":' || CEP_RES_W || ',' || '"endereco_com": "",' || '"numero_com":"",' || '"bairro_com":"",' || '"complemento_com":"",' || '"cidade_com":"",' || '"cep_com":""' || '}'); exception when others then raise_application_error(-20000,'Erro: '|| sqlerrm); END; END; Alguém sabe o que pode ser? Obrigado desde já pela atenção!
  13. Preciso desenvolver um sistema que automatiza o atendimento a alunos feitos por coordenadores. Quando algum aluno chegar na secretária e pedir para ser atendido por algum coordenador, ela vai cadastrar no sistema essa solicitação de atendimento. Este aluno entrara na fila do referido coordenador. Então fiz duas tabelas. "Fila" que é a da secretária que vai cadastrar e a "Coordenador" que é as informações dele. o que quero é passar somente as seguintes informações da fila para o coordenador: Nome, Curso, se já é aluno, status e data/hora. até agora está desse jeito, e não sei como fazer para passar essas informações automaticamente para ele, alguém pode me ajudar? Estou usando o Workbench. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; CREATE SCHEMA IF NOT EXISTS `at_automatizado` DEFAULT CHARACTER SET utf8 ; USE `at_automatizado` ; -- ----------------------------------------------------- -- Table `at_automatizado`.`coordenador` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `at_automatizado`.`coordenador` ( `codigo` INT NOT NULL AUTO_INCREMENT, `login` VARCHAR(45) NULL, `senha` VARCHAR(45) NULL, `nome_coordenador` VARCHAR(100) NULL, `ramal` VARCHAR(9) NULL, `curso` VARCHAR(45) NULL, PRIMARY KEY (`codigo`)) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `at_automatizado`.`fila` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `at_automatizado`.`fila` ( `codigo` INT NOT NULL AUTO_INCREMENT, `coordenador_codigo` INT NOT NULL, `nome_coordenador` VARCHAR(100) NULL, `nome_aluno` VARCHAR(100) NULL, `telefone` VARCHAR(14) NULL, `curso` VARCHAR(100) NULL, `ja_e_aluno` ENUM('Sim', 'Não') NULL, `status` ENUM('Já atendido', 'Não atendido') NULL, `data_e_hora` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`codigo`), INDEX `fk_fila_coordenador_idx` (`coordenador_codigo` ASC), CONSTRAINT `fk_fila_coordenador` FOREIGN KEY (`coordenador_codigo`) REFERENCES `at_automatizado`.`coordenador` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
  14. MauVirtual

    Usar Trigger? Procedure? Ambas?

    Pessoal, estou perdido tenho a seguinte tarefa abaixo, mas usando a trigger não posso dar o select ela nao aceita, e não sei se uso procedure, triger, ambas, sei que essa parte deveria ser feito pela aplicação, mas o professor quer essa apresentação somente em BD. compare se a data e hora da viagem e o motorista e viatura estão disponíveis antes de incluir no banco de dados, Entao digamos que a viatura Gol tem uma viagem com o motorista Carlos dia 22/03/2018 as 11:00 com termino no mesmo dia porem na hora 17:00 e suponhamos que alguem quera cadastra a viagem com o mesmo motorista a mesma viatura no mesmo dia porem no horario do 12:00, não poderia ser cadastrado já que a viatura e motorista estariam ocupados. Estão preci ser checado se a viatura está disponivel, se o motorista está disponivel em um intervalo de dia e hora, pois poderam acontecer viagens de mais de um dia. Abaixo segue meu código sou bem iniciante e toda ajuda seria muito bem vinda. Já criei um posto sobre isso, mas mudei a tabela e naquele post não consegui resolver agredeço a ajuda, batendo o desespero já CREATE TABLE DADOSPESSOAS( IDDADOSPESSOAS INT PRIMARY KEY AUTO_INCREMENT, NOME VARCHAR(45) NOT NULL, EMAIL VARCHAR(45) UNIQUE NOT NULL, NIVEL CHAR(1) NOT NULL, DATANASCIMENTO DATE NOT NULL, SEXO CHAR(1) NOT NULL, CPF CHAR(14) UNIQUE NOT NULL, CELULAR VARCHAR(14) UNIQUE NOT NULL, CEP CHAR (9) NOT NULL, RUA VARCHAR(30) NOT NULL, NUMERO VARCHAR(8) NOT NULL, BAIRRO VARCHAR(25) NOT NULL, CIDADE VARCHAR(40) NOT NULL, ESTADO CHAR(2) NOT NULL ); CREATE TABLE MOTORISTA ( IDMOTORISTA INT PRIMARY KEY AUTO_INCREMENT, NUMEROREGISTRO VARCHAR(10) UNIQUE NOT NULL, VALIDADE DATE NOT NULL, ID_DADOSPESSOAS INT ); CREATE TABLE ADMIN( IDADMIN INT PRIMARY KEY AUTO_INCREMENT, SENHA VARCHAR(12) NOT NULL, ID_DADOSPESSOAS INT ); CREATE TABLE VIATURA ( IDVIATURA INT PRIMARY KEY AUTO_INCREMENT, TIPOVEICULO VARCHAR(45) NOT NULL, MARCA VARCHAR(25) NOT NULL, MODELO VARCHAR(25) NOT NULL, COR VARCHAR(25) NOT NULL, ANOFABRICACAO CHAR(4) NOT NULL, PLACA CHAR(8) UNIQUE NOT NULL, RENAVAN CHAR(11) UNIQUE NOT NULL, PASSAGEIROS CHAR(2) NOT NULL ); CREATE TABLE VIAGENS ( IDVIAGENS INT PRIMARY KEY AUTO_INCREMENT, CIDADE VARCHAR(25) NOT NULL, DATAHORAINICIO DATETIME NOT NULL, DATAHORAFINAL DATETIME NOT NULL, COR VARCHAR(15) NOT NULL, CEP CHAR(9) NOT NULL, RUA VARCHAR(30) NOT NULL, NUMERO VARCHAR(8) NOT NULL, BAIRRO VARCHAR(25) NOT NULL, ESTADO CHAR(2) NOT NULL, DESCRICAO VARCHAR(200), ID_DADOSPESSOAS INT, ID_MOTORISTA INT, ID_VIATURA INT ); CREATE TABLE PASSAGEIRO ( IDPASSAGEIRO INT PRIMARY KEY AUTO_INCREMENT, ID_DADOSPESSOAS INT , ID_VIAGEM INT ); ALTER TABLE VIAGENS ADD CONSTRAINT FK_DADOSPESSOAS_VIAGENS FOREIGN KEY (ID_DADOSPESSOAS) REFERENCES DADOSPESSOAS(IDDADOSPESSOAS) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE VIAGENS ADD CONSTRAINT FK_MOTORISTA_VIAGENS FOREIGN KEY (ID_MOTORISTA) REFERENCES MOTORISTA(IDMOTORISTA)ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE VIAGENS ADD CONSTRAINT FK_VIATURA_VIAGENS FOREIGN KEY (ID_VIATURA) REFERENCES VIATURA(IDVIATURA)ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE MOTORISTA ADD CONSTRAINT FK_DADOSPESSOAS_MOTORISTA FOREIGN KEY (ID_DADOSPESSOAS) REFERENCES DADOSPESSOAS(IDDADOSPESSOAS)ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE ADMIN ADD CONSTRAINT FK_DADOSPESSOAS_ADMIN FOREIGN KEY (ID_DADOSPESSOAS) REFERENCES DADOSPESSOAS(IDDADOSPESSOAS)ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE PASSAGEIRO ADD CONSTRAINT FK_DADOSPESSOAS_PASSAGEIRO FOREIGN KEY (ID_DADOSPESSOAS) REFERENCES DADOSPESSOAS (IDDADOSPESSOAS)ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE PASSAGEIRO ADD CONSTRAINT FK_VIAGENS_PASSAGEIRO FOREIGN KEY (ID_VIAGEM) REFERENCES VIAGENS (IDVIAGENS)ON DELETE CASCADE ON UPDATE CASCADE;
  15. Lucas Antonio Paiva

    duvida

    gente tenho essa trigger set new.divida_final= new.negativo - new.pago; tabela fiado, com os campos id,nome cliente,negativo ,pago e divida final,fuciona mais quando eu do um update fiado set pago= 12 where id ='7'; o comando fuciona de boa so que no campo divida_final ele n atualiza o valor alguem pode me ajudar :\
  16. marcelocardoso

    Redirecionar para ID

    Pessoal! 98% pronto o código, porém, olhem só: <script type="text/javascript"> $(document).ready(function() { //função para pegar URL e mostrar paramêtros $.extend({ getURL: function(){ var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); //quebra cada parametro e separa for(var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; }, getURL: function(name){ return $.getURL()[name]; var varAcao = $.getURL('acao'); } $(location).attr('id',$("#menu_confirmacoes").slideUp("slow")); }); }); </script> O código acima, pega a URL, e faz um SPLIT para separar os paramêtros, mas tipo: consigo pegar tudo o que preciso, na BOA. Mas, como FAÇO para após tudo isso, redirecionar para um determinado ID com efeito slidedown, slideUP e etc... Procurei na internet sobre trigger, e demais formas, não encontrei, será que é possível o pessoal mais avançado em JQ realizar isso. Já que será CAPTURADO o endereço da URL, pegar o parametro e depois sim, REDIRECIONAR para um ID dentro da página????? ESTOU USANDO ISSO: teria que ser mais ou menos assim. $(location).attr('id',$("#menu_confirmacoes").slideUp("slow")); Sugestões para isso, agradeço. Só falta isso, se assim for possível realizar isso...
  17. Senhores(as), Há tempos, e depois de muitas pesquisas, ainda estou com o problema em aberto: 1. Ao atualizar uma coluna de uma determinada linha de uma tabela, 2. Mover ou copiar essa linha para outra tabela (Ex.: tableBackup), e APAGAR essa linha na tabela atual. Estou usando trigger AFTER UPDATE na tabela que é atualizada para copiar a linha para outra tabela e funciona. Contudo, na "tabelaBackup" que recebe a linha, eu usei trigger AFTER INSERT para apagar a linha na tabela de origem e não funciona: -- O erro: #1442 - Can't update table 'produtos' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. Eu li que não é possível executar dois comandos de alteração na mesma tabela 'aberta', é o que o erro acima diz. Alguém tem uma solução ou ajuda? Agradeço. TRIGGER AFTER UPDATE na tabela origem: CREATE TRIGGER `Copiar` AFTER UPDATE ON `tabela1` FOR EACH ROW BEGIN IF NEW.a IS NOT NULL THEN SET @ID = NEW.`id`; INSERT INTO tabelaBackup SELECT * FROM tabela1 WHERE `id`= @ID AND `a` IS NOT NULL; END IF; END TRIGGER AFTER INSER na tabela destino: CREATE TRIGGER `Apagar` AFTER INSERT ON `tabelabackup` FOR EACH ROW BEGIN DELETE FROM tabela1 WHERE `id` = @ID AND `a` IS NOT NULL; END
  18. olá pessoal. sou novo no forum e também no assunto trigger para o mysql e precisei usar este recurso, mas não estou conseguindo chegar ao resultado que gostaria, por isso venho aqui pedir ajuda de vocês. seguinte: tenho uma tabela 'lancamentos' com o campos [iD;HISTORICO;TIPO;VALOR;SALDO] [Tipo = Debito (D) ou Credito ©] e tenho criar uma trigger pra ser disparada no BEFORE INSERT para calcular o saldo e inserir no campo SALDO. vejam exemplo abaixo que já encontrei em outro post aqui. CREATE TRIGGER `SaldoAtual` BEFORE INSERT ON `lancamentos` FOR EACH ROW BEGIN DECLARE saldoAnterior DECIMAL(10,2); SET saldoAnterior = (SELECT L.SALDO FROM lancamentos L ORDER BY L.ID DESC LIMIT 1); IF saldoAnterior <> '' THEN IF (NEW.TIPO = 'C') THEN SET NEW.SALDO = saldoAnterior + NEW.VALOR; ELSE SET NEW.SALDO = saldoAnterior - NEW.VALOR; END IF; ELSE SET NEW.SALDO = NEW.VALOR; END IF; END esse exemplo funciona bem para o insert, mas existe outra dificuldade e não tenho conseguido resolver. Preciso ter outra trigger no BEFORE UPDATE da mesma tabela que se eu alterar um valor anterior por exemplo esta trigger atualize o saldo da linha alterada e de todas as outras linhas que existirem depois dela para que o saldo fique correto. espero ter me feito compreender e se alguém puder me ajudar com algum exemplo eu ficarei muito grato.
  19. cesar.graeff

    LAST_INSERT_ID

    Bom dia, Estou com alguns problemas em relação ao LAST_INSERT_ID do mysql. Tenho uma tabela de usuários onde o id não é AUTO_INCREMET, o id é gerado pela trigger a seguir: CREATE TRIGGER `id_usuarios` BEFORE INSERT ON `usuarios` FOR EACH ROW BEGIN SET NEW.id = (SELECT COALESCE(MAX(id),0) + 1 FROM usuarios WHERE empresa = NEW.empresa); END Porém desta maneira não consigo que seja retornado o id pelo LAST_INSERT_ID(). Teria alguma form de setar este valor do NEW.id para ser retornado pelo LAST_INSERT_ID() ?
  20. Latorre

    Validação em Trigger

    Olá, estou com uma dúvida e não consigo encontrar uma solução, preciso criar uma trigger que verifique se já existe esse campo inserido em uma outra tabela, caso não exista ele faz o insert o meu insert está dessa forma: CREATE OR REPLACE TRIGGER "SCO_TRG_GERA_SENHA" AFTER UPDATE on laudo_paciente REFERENCING NEW AS N OLD AS A FOR EACH ROW BEGIN insert into sco_laudo(nr_prescricao, nr_senha, dt_validade) values (:N.nr_prescricao, DBMS_RANDOM.STRING('x',8), sysdate); end; Como faço pra fazer uma verificação se existe um valor igual de nr_prescrição na tabela sco_laudo? Porque se existir não posso dar um insert, pois é um numero único.
  21. Bom dia, Preciso de uma trigger para quando o campo PDC.TP_STATUS passar para o Status de FECHADO sera preenchido o campo PDC.DH_FECHAMENTO com a data e o horário que ele foi fechado e que pegue estes dados e altere na coluna AT.DT_ALTA E AT.HR_ALTA da tabela ATENDIME, sendo assim pegara os dados da primeira e alterar na segunda.
  22. Olá, sou novo no forum, achei muito interessante as informações por aqui, espero poder ajudar a comunidade e aprender bastante também. Estou tentando configurar um trigger para ser rodado quando uma tabela é atualizada (gostaria que o trigger fosse rodado apenas quando um campo específico da tabela passa de 2) e neste momento ele teria que rodar um delete primeiro (para casos em que o processo já tinha sido efetuado e os valores foram alterados) seguido de um insert. Quase não tenho conhecimento de sql além de simples selects, updates, etc... Estou dando uma estudada e pesquisando bastante, porém surgiu uma urgência na implantação deste comando e não estou conseguindo achar nenhum exemplo prático para me basear, qualquer sugestão é bem vinda. Abaixo o caso: tenho uma TBL_COMPRAS_NOTAFISCAL_ENTRADA em que quando o campo status nela for alterado pra 2 ele deveria fazer um delete e depois um insert na TBL_CONTABIL_LANCAMENTOS_CTB pegando informações da TBL_CUSTOS_DESDOBRADOS usando o select abaixo: SELECT A.CD_LANCAMENTO, A.CD_ORIGEM, 1 NR_PARCELA, 1 CD_ITEM_PARCELA, A.CD_EMPRESA, B.CD_FILIAL, D.CD_CONTA_CTB CD_CONTA_DEBITO, C.CD_CONTA CD_CONTA_CREDITO, D.CD_HISTORICO, A.DT_LANCAMENTO, NULL DS_COMPLEMENTO , B.NR_DOCUMENTO, SUM(A.VL_CUSTO) AS VL_LANCAMENTO, A.DS_NOME_FORMULARIO DS_TEXTO, A.CD_USUARIO, NULL CD_CHAVE, A.CD_USUARIOAT, B.DT_CADASTRO, B.DT_ATUALIZACAO, A.CD_LANCAMENTO, B.CD_FORNECEDOR, 1 NR_PARCELAS, 'Desdobramento NF entrada' DS_OBS FROM TBL_CUSTOS_DESDOBRADOS A, TBL_COMPRAS_NOTAFISCAL_ENTRADA B, TBL_CONTABIL_PLANO_CONTAS C, TBL_CONTABIL_PLANO_CONTAS_GERENCIAL D, TBL_ENTIDADES E WHERE A.CD_LANCAMENTO = B.CD_ENTRADA AND A.CD_CONTA_GERENCIAL = D.CD_CONTA_GERENCIAL AND B.CD_FORNECEDOR = E.CD_ENTIDADE AND A.CD_EMPRESA = D.CD_EMPRESA AND E.NR_CPFCNPJ = C.NR_CPFCNPJ AND C.CD_CONTA > 500000 AND A.CD_EMPRESA = C.CD_EMPRESA AND A.CD_LANCAMENTO = @cdlanc GROUP BY A.CD_LANCAMENTO, A.CD_ORIGEM, A.CD_EMPRESA, B.CD_FILIAL, D.CD_CONTA_CTB, C.CD_CONTA, D.CD_HISTORICO, A.DT_LANCAMENTO, B.NR_DOCUMENTO, A.DS_NOME_FORMULARIO, A.CD_USUARIO, A.CD_USUARIOAT, B.DT_CADASTRO, B.DT_ATUALIZACAO, B.CD_FORNECEDOR O "@CDLANC" viria da primeira tabela, do lançamento em que é alterado o status pra 2, porém não sei como declarar isso exatamente (para que ele não execute o processo em todas cada vez que há a alteração de status, o que ia demorar bastante...) Qualquer dica, orientação ou sugestão é muito bem vinda
  23. cesar.graeff

    MySQL Trigger

    Bom dia, Estou precisando fazer uma trigger BEFORE UPDATE para verificar se realmente ouve alterações no registro e se não houver cancelar a edição Exemplo: Tenho uma tabela clientes: id | nome | data_criado | data_alterado 1 | TESTE | 2017-05-22 00:00:00 | 2017-05-22 00:00:00 2 | OUTRO | 2017-05-22 00:00:00 | 2017-05-22 00:00:00 O campo data_alterado está marcado como ON_UPDATE_CURRENT_TIMESTAMP Então irei executar o seguinte update: UPDATE clientes SET nome = 'TESTE' WHERE id = 1 A trigger deveria analisar e não fazer o update deste registro visto que o nome continua igual mantendo a mesma data no campo data_alterado Porém minha tabela tem vários campos e acredito que fazer a verificação campo a campo não seria o ideal Alguém já fez algo parecido ou sabe como resolver o problema?
  24. Boa tarde, Estou tentando criar um evento para limpar linhas da minha tabela de 1 dia atrás, para que execute a cada 15 minutos, ja fiz de varias formas mas meu MySQL nao executa, o que pode estar errado? alguem pode ajudar? Criei meu evento desta forma: CREATE EVENT limpeza on schedule every 15 minute do delete from tempdat where tdate < DATE_SUB(NOW(), INTERVAL 1 DAY); Obrigado! Detalhe, quando rodo o comando na mão ele limpa as linhas desejadas... mas quando crio o evento, ele nao executa sozinho a cada 15 minutos...
  25. Bom dia pessoal, Preciso saber como crio uma trigger ou um evento para que, a cada 24horas (ou todo dia meia-noite) a tabela seja limpa mantendo somente os ultimos 120 registros da tabela ordenando pelo campo ID. Como faço? Esses são os dados da minha tabela: mysql> select * from tempdat ORDER BY id DESC LIMIT 50; +-----+------------+----------+-----------+-------------+---------+----------------------------+ | id | tdate | ttime | zone | temperatura | umidade | image | +-----+------------+----------+-----------+-------------+---------+----------------------------+ | 349 | 2017-04-24 | 09:40:02 | principal | 21 | 45 | photo-24-04-2017.09.39.jpg | | 348 | 2017-04-24 | 09:30:10 | principal | 19 | 46 | photo-24-04-2017.09.29.jpg | | 347 | 2017-04-24 | 09:20:02 | principal | 19 | 46 | photo-24-04-2017.09.19.jpg | | 346 | 2017-04-24 | 09:10:02 | principal | 19 | 47 | photo-24-04-2017.09.09.jpg | | 345 | 2017-04-24 | 09:00:03 | principal | 19 | 46 | photo-24-04-2017.08.59.jpg | | 344 | 2017-04-24 | 08:50:02 | principal | 19 | 47 | photo-24-04-2017.08.49.jpg | | 343 | 2017-04-24 | 08:40:07 | principal | 18 | 48 | photo-24-04-2017.08.39.jpg |
×

Important Information

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