Ir para conteúdo
Fórum Script Brasil

Pesquisar na Comunidade

Mostrando resultados para as tags ''trigger''.

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • Programação & Desenvolvimento
    • ASP
    • PHP
    • .NET
    • Java
    • C, C++
    • Delphi, Kylix
    • Lógica de Programação
    • Mobile
    • Visual Basic
    • Outras Linguagens de Programação
  • WEB
    • HTML, XHTML, CSS
    • Ajax, JavaScript, XML, DOM
    • Editores
  • Arte & Design
    • Corel Draw
    • Fireworks
    • Flash & ActionScript
    • Photoshop
    • Outros Programas de Arte e Design
  • Sistemas Operacionais
    • Microsoft Windows
    • GNU/Linux
    • Outros Sistemas Operacionais
  • Softwares, Hardwares e Redes
    • Microsoft Office
    • Softwares Livres
    • Outros Softwares
    • Hardware
    • Redes
  • Banco de Dados
    • Access
    • MySQL
    • PostgreSQL
    • SQL Server
    • Demais Bancos
  • Segurança e Malwares
    • Segurança
    • Remoção De Malwares
  • Empregos
    • Vagas Efetivas
    • Vagas para Estágios
    • Oportunidades para Freelances
  • Negócios & Oportunidades
    • Classificados & Serviços
    • Eventos
  • Geral
    • Avaliações de Trabalhos
    • Links
    • Outros Assuntos
    • Entretenimento
  • Script Brasil
    • Novidades e Anúncios Script Brasil
    • Mercado Livre / Mercado Sócios
    • Sugestões e Críticas
    • Apresentações

Encontrar resultados em...

Encontrar resultados que...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

Encontrado 17 registros

  1. Estou finalizando um sistema aqui e estou com dificuldades para criar um Trigger ou até mesmo uma Stored Procedure, não sei qual a forma mais correta ou indicada nesse caso. Tenho uma tabela chamada <vendas> que armazena os dados de uma venda. CREATE TABLE IF NOT EXISTS `gfinan`.`vendas` ( `id_venda` INT NOT NULL AUTO_INCREMENT, `cpf` CHAR(11) NOT NULL, `placa` CHAR(7) NOT NULL, `id_pagamento` INT NOT NULL, `valor` DECIMAL(10,2) NOT NULL, `parcelas` INT NOT NULL, `data` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `cnpj` CHAR(14) NOT NULL, `id_usuario` INT NOT NULL, `status` CHAR(1) NOT NULL DEFAULT 'A', PRIMARY KEY (`id_venda`), INDEX `fk_vendas_veiculos_idx` (`placa` ASC), INDEX `fk_vendas_usuarios_idx` (`id_usuario` ASC), INDEX `fk_vendas_clientes_idx` (`cpf` ASC), INDEX `fk_vendas_empresas_idx` (`cnpj` ASC), INDEX `fk_vendas_pagamentos_idx` (`id_pagamento` ASC), ENGINE = InnoDB O campo <id_pagamento> identifica a forma de pagamento em uma venda, sendo a vista ou através de notas promissórias. Quando for informado por exemplo o valor total de R$30.000,00 pagos em 12 notas promissórias, ao gravar os dados na tabela <vendas>, preciso que o banco insira na tabela <promissorias> 12 registros contendo, as datas de pagamentos, o numero da nota promissória e o valor de cada uma delas com base nos dados gravados na tabela anterior. A estrutura da tabela <promissorias> é essa: CREATE TABLE IF NOT EXISTS `picinin`.`promissorias` ( `id_promissoria` INT NOT NULL AUTO_INCREMENT, `vencimento` DATETIME NOT NULL, `numeracao` INT NOT NULL, `valor` DECIMAL(10,2) NOT NULL, `emissao` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `id_venda` INT NOT NULL, `status` CHAR(1) NOT NULL DEFAULT 'E', PRIMARY KEY (`id_promissoria`), INDEX `fk_promissorias_vendas1_idx` (`id_venda` ASC), ENGINE = InnoDB Preciso também que esses dados seja excluídos caso a venda seja cancelada. Nunca precisei fazer algo assim e estou com muita dificuldade, podem me orientar?
  2. 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? 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;
  3. Olá pessoal, Sou novato aqui no fórum. Estou tentando fazer a trigger abaixo, mas está dando erro no primeiro SET, como posso corrigir? CREATE DEFINER = CURRENT_USER TRIGGER `F001_ESTOQUE_ALTERAR` AFTER INSERT ON `F001_ESTOQUE` FOR EACH ROW BEGIN SET NEW.SALDOANTERIOR = (CASE WHEN NEW.ID = (SELECT MIN(X.ID) FROM F001_ESTOQUE X WHERE X.IDPRODUTO = NEW.IDPRODUTO LIMIT 1) THEN IFNULL(NEW.SALDOANTERIOR, 0) ELSE IFNULL((((SELECT IFNULL(X.SALDOANTERIOR, 0) FROM F001_ESTOQUE X WHERE X.IDPRODUTO = NEW.IDPRODUTO AND X.ID < NEW.ID ) + IFNULL(NEW.ENTRADA, 0)) - IFNULL(NEW.SAIDA, 0)), 0)); SET NEW.SALDOATUAL = ((CASE WHEN NEW.SALDOANTERIOR IS NULL THEN 0 ELSE NEW.SALDOANTERIOR END) + (CASE WHEN NEW.ENTRADA IS NULL THEN 0 ELSE NEW.ENTRADCASE WHEN A.ID = (SELECT MIN(X.ID) FROM F001_ESTOQUE X WHERE X.IDPRODUTO = A.IDPRODUTO LIMIT 1) THEN IFNULL(A.SALDOANTERIOR, 0) ELSE IFNULL((((SELECT IFNULL(X.SALDOANTERIOR, 0) FROM F001_ESTOQUE X WHERE X.IDPRODUTO = A.IDPRODUTO AND X.ID < A.ID ) + IFNULL(A.ENTRADA, 0)) - IFNULL(A.SAIDA, 0)), 0))A END)) - (CASE WHEN NEW.SAIDA IS NULL THEN 0 ELSE NEW.SAIDA END); SET NEW.VALORSALDOATUAL = ((CASE WHEN NEW.VALORANTERIOR IS NULL THEN 0 ELSE NEW.VALORANTERIOR END) + (CASE WHEN NEW.VALORENTRADA IS NULL THEN 0 ELSE NEW.VALORENTRADA END)) - (CASE WHEN NEW.VALORSAIDA IS NULL THEN 0 ELSE NEW.VALORSAIDA END); IF(NEW.IDPRODUTO = 0) THEN SET NEW.IDPRODUTO = NULL; END IF; IF(NEW.IDDETALHEPEDIDO = 0) THEN SET NEW.IDDETALHEPEDIDO = NULL; END IF; IF(NEW.IDUSUARIOALTERA = 0) THEN SET NEW.IDUSUARIOALTERA = NULL; END IF; UPDATE E005_PRODUTOS SET E005_PRODUTOS.QUANTESTOQUE = NEW.SALDOATUAL WHERE E005_PRODUTOS.ID = NEW.ID; END; Grato, Ilano
  4. Olá Galera, Estou querendo desenvolver um gatilho, Para que ele possa derrubar todas as querys quando o comparativo de tipo de dados forem diferentes. Exemplo, int com varchar = Kill, afinal não tem sentido e o banco só perde performance, poderiam me ajudar?
  5. Olá bom dia... gostaria da ajuda de vocês, preciso dessa trigger no formato do MySql, aqui ela foi feita no SQL Server CREATE trigger tgiDecrementaEstoqueVenda on itensvenda for insert as BEGIN DECLARE @qtde float, @codigo integer SELECT @codigo = pro_cod, @qtde = itv_qtde FROM INSERTED update produto set pro_qtde = pro_qtde - @qtde where produto.pro_cod = @codigo end go
  6. Olá, estou tendo um problema com uma trigger. Explicando a situação: Eu tenho as seguintes tabelas: CREATE TABLE `pessoas` ( `codigo` int(11) NOT NULL, `nome` varchar(70) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`codigo`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; CREATE TABLE `programa_semanal` ( `semana` date NOT NULL, `tema` varchar(100) CHARACTER SET utf8 DEFAULT NULL, `presidente` int(11) DEFAULT NULL, `orador` int(11) DEFAULT NULL, PRIMARY KEY (`semana`), KEY `FK_Orador_idx` (`orador`), KEY `FK_Presidente_idx` (`presidente`), CONSTRAINT `FK_Orador` FOREIGN KEY (`orador`) REFERENCES `pessoas` (`codigo`), CONSTRAINT `FK_Presidente` FOREIGN KEY (`presidente`) REFERENCES `pessoas` (`codigo`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; O que acontece: Eu tenho um cadastro de pessoas e um cadastro de programação semanal que vou alimentando no início de cada mês as semanas seguintes. Neste cadastro antecipado, informo a semana e o tema, e as informações são inseridas na tabela programa_semanal. Alguns dias antes de determinada semana chegar, eu preciso editar a programação e escolher, dentre a lista de pessoas, quem vai ser o presidente e quem vai ser o orador, e as informações são editadas na tabela programa_semanal. Eu posso também, caso a semana não tenha passado, editar a programação semanal e escolher outras pessoas como presidente e orador. Para evitar que algumas pessoas sejam escolhidas com mais frequência do que outras como presidentes ou oradores, eu criei outra tabela que tem a seguinte estrutura: CREATE TABLE `participacao` ( `codigo_pessoa` int(11) NOT NULL, `semana` date NOT NULL, `tipo_participacao` varchar(1) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`codigo_pessoa`,`semana`), CONSTRAINT `FK_Pessoa` FOREIGN KEY (`codigo_pessoa`) REFERENCES `pessoas` (`codigo`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; Quando eu gravar as alterações na tabela programa_semanal, a ideia é que a trigger faça uma inserção ou uma alteração nesta tabela participacao, levando em consideração o seguinte: Quando eu faço INSERT na tabela programa_semanal, as colunas 'presidente' e 'orador' ficam com valor NULL, pois estou apenas cadastrando as semanas antecipadamente. Neste caso a trigger não deve fazer nada pois o presidente e o orador ainda não foram escolhidos. Quando eu faço UPDATE na tabela programa_semanal é quando as colunas 'presidente' e 'orador' ficam com valor inteiro. Neste caso, a trigger deve validar se o valores antigos das colunas 'presidente' e 'orador' na tabela programa_semanal são nulos: - Se forem nulos, a trigger deve fazer INSERT na tabela participação, pois é a primeira vez que o presidente e o orador foram definidos para aquela semana. - Se não forem nulos, a trigger deve fazer UPDATE na tabela participacao, pois resolvi escolher outra pessoa como presidente ou orador naquela semana. - Tanto no INSERT quanto no UPDATE as colunas 'codigo_pessoa' e 'semana' vem da tabela programa_semanal e a coluna 'tipo_participacao' recebe o valor 'O' caso seja orador, ou valor 'P' caso seja presidente; Isso me permitiria, na hora de escolher o presidente e o orador para determinada semana, fazer um SELECT ordenando pelas pessoas que a mais tempo não são escolhidas como presidente ou como orador, para que todos tenham as mesmas chances de participar. No momento, a trigger está definida assim: DELIMITER $$ DROP TRIGGER IF EXISTS updateParticipantes; $$ DELIMITER // CREATE TRIGGER updateParticipantes AFTER UPDATE ON programa_semanal FOR EACH ROW BEGIN IF old.presidente <> new.presidente THEN IF old.presidente IS NULL THEN INSERT INTO participacao (codigo_pessoa, semana, tipo_participacao) VALUES (new.presidente, new.semana, 'P'); ELSE UPDATE participacao SET codigo_pessoa = new.presidente WHERE participacao.semana = new.semana AND participacao.tipo_participacao = 'P'; END IF; END IF; IF old.orador <> new.orador THEN IF old.orador IS NULL THEN INSERT INTO participacao (codigo_pessoa, semana, tipo_participacao) VALUES (new.orador, new.semana, 'O'); ELSE UPDATE participacao SET codigo_pessoa = new.orador WHERE participacao.semana = new.semana AND participacao.tipo_participacao = 'O'; END IF; END IF; END Só que ela não está funcionando e eu não consigo entender o por quê. Quando eu executo este script para deleção / criação da trigger não dá nenhum erro de execução, então até onde eu entendo não há erro de sintaxe na definição da trigger. Só que quando atualizo a tabela programa_semanal com valores para presidente e orador, nada acontece na tabela participacao. Mas se eu colocar algum INSERT ou UPDATE logo após o BEGIN, isso funciona, então aparentemente o problema é nos IFs. Alguém poderia me ajudar a entender o que está errado? Muito obrigado!
  7. Boa tarde, pessoal! É o seguinte, eu criei uma trigger para alterar alguns campos dentro da própria tabela da trigger para evitar retrabalho na codificação, até aí tudo bem. Nesta trigger eu tenho uma função que retorna a chave primária de uma tabela nossa para fins de logs, nesse caso, para saber que realizou o cancelamento, mas ao atribuir o valor que essa função retorna para o campo da tabela da trigger, o campo continua nulo (MAS ELE RETORNA!, Fiz um teste inserindo o registro que deveria ser atribuindo, inserindo-o numa tabela de teste, e foi inserido com sucesso!). Segue a trigger: DECLARE vidlogorigem integer; vgeralog boolean = false; BEGIN IF tg_op = 'UPDATE' THEN vgeralog = (OLD.sit <> 'CC') AND (NEW.sit = 'CC'); ELSEIF tg_op = 'INSERT' THEN vgeralog = NEW.sit = 'CC'; END IF; IF vgeralog THEN vidlogorigem = (select getidlogorigem()); insert into teste(id) values (vidlogorigem); NEW.teste = vidlogorigem; NEW.datacancel = clock_timestamp(); END IF; RETURN NEW; END; A função "getidlogorigem" é a que me retorna a chave primária duma tabela de usuários. Eu utilizo isto em outros lugares que funcionam tranquilamente. Obrigado!
  8. Olá, estou tentando criar um novo usuário no MySql a partir de uma trigger. A ideia é que toda vez que eu insira um cliente no banco a trigger seja disparada e execute uma procedure que preencha os campos em uma tabela usuário e também crie este usuário, com as devidas permissões no meu SGBD (MySql). Abaixo segue minha tentativa, mas da o seguinte erro: error 1422: Explicit or implicit commit is not allowed in stored function or trigger. Notem que nem cheguei a implementar os grants. DELIMITER $$CREATE OR REPLACE PROCEDURE TESTE_PROCEDURE (IN CPF VARCHAR(15), IN NOME VARCHAR(20), IN SENHA VARCHAR(20))BEGIN DECLARE USUARIO VARCHAR(30); DECLARE SENHA VARCHAR(30); INSERT INTO USUARIO VALUES('4', NOME, SENHA, CPF); SET USUARIO = CONCAT(NOME, '@localhost'); CREATE USER USUARIO identified by '111222'; END $$DELIMITER ;DELIMITER $$CREATE TRIGGER TESTE_INSERCAO AFTER INSERT ON CLIENTE FOR EACH ROW BEGIN CALL TESTE_PROCEDURE(NEW.CPF, NEW.NOME, '123456'); END $$DELIMITER ;
  9. Preciso fazer uma trigger para verificar se o cliente já está cadastrado, mas não sei por onde começar. Se puderem me ajudar ficarei muito grato. Ps, Sou iniciante no postgresql
  10. Boa tarde, pessoal! Alguém pode me dizer se existe uma maneira de eu passar o id gerado via serial em uma tabela como argumento para uma trigger function? Eu preciso replicar este valor em outras tabelas via trigger, mas não achei uma maneira de capturar dinamicamente o id gerado na tabela. Desde já agradeço a ajuda! Abraços Cláudio
  11. Galera, bom dia! Sou novo no postgreSQL e estou apanhando ao tentar fazer um Trigger Function, criei um banco e dados com uma tabela de produtos, essa tabela tem um trigger que deve disparar toda vez que um produto for atualizado verificando se o estoque atual é menor ou igual ao estoque mínimo, caso “sim” esse produto deve ficar com o status bloqueado segue o código: CREATE OR REPLACE FUNCTION public.bloquear_produto_estoque_baixo() RETURNS trigger AS $BODY$ BEGIN IF NEW.estoque_atual <= NEW.estoque_minimo THEN UPDATE public.tb_produto SET produto_bloqueado=true WHERE id_produto = OLD.id_produto; END IF; RETURN NULL; END $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION public.bloquear_produto_estoque_baixo() OWNER TO postgres; No entanto, toda vez que executo essa função o Postgres trava e parece que o computador vai explodir.
  12. Olá bom dia pessoal, tenho uma tabela de clientes com os campos de Data de Cadastro do Registro e Data de Modificação do Registro alguém saberia como fazer para criar uma trigger que atualiza a coluna de Data de Modificação dessa tabela de clientes toda vez que uma linha for alterada, até agora pensei em algo parecido com isso aqui ------------------------ CREATE trigger ATUALIZA_DATA_MODIFICACAO for TB_CLIENTE active before update position 0 AS begin update TB_CLIENTE set TB_CLIENTE.DATA_MODIFICACAO = current_date where TB_CLIENTE.CODIGO = ????; end --------------------------
  13. Boa noite caros colegas, sou iniciante no mundo da programação e estou com um problema para implementar um trigger em um banco de dados, já tentei de diversas formas a cada momento com um erro diferente gostaria que os senhores me orientassem para sanar esse problema que a mesma apresentou por último, tenho um banco de dados que gerencia a finança pessoal do indivíduo esse banco possui a tabela categoria, a tabela usuário, a tabela movimento e a tabela saldo, o funcionamento é o seguinte a cada crud na tabela movimento a trigger irá atualizar a tabela saldo, durante um insert que fiz para testar sempre me retorna um erro e conforme mexo no BD o erro muda mas funcionar que é bom nada, gostaria que os senhores me ajudassem sei que para alguns é algo bobo mas pense em um iniciante que até duas semanas não sabia nem que trigger existia e resolveu tentar. Agradeço a compreensão de todos.
  14. sou novo em mysql, estou criando uma stored procedure. e tendo chamar ela na tringger só que da erro CREATE DEFINER=`root`@`localhost` PROCEDURE `cnh_testes`( in v_veiculo int, in v_data_reserva date,in v_hora_reserva time, in v_previsao_volta date,in v_previsao_hora time,in v_destino int,in v_obs varchar(255),in v_condutor_id int) BEGIN declare v_validacnh INT; select c.id_condutor into v_validacnh from condutor c inner join veiculo v on v.Id_cnh = c.id_cnh where c.vencimento_cnh <= current_date() and c.id_condutor = c.id_condutor; if v_validacnh = v_condutor_id then rollback; SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'CNH VENCIDA OU CNH NÃO PERMITIDA PARA ESSE VEICULO'; else insert INTO RESERVA (veiculo,data_reserva,hora_reserva,previsao_volta,previsao_hora,destino,obs,condutor_id ) values(v_veiculo,v_data_reserva,v_hora_reserva,v_previsao_volta,v_previsao_hora,v_destino,v_obs,v_condutor_id ); end if; END *********aqui chamo ela na trigger************ CREATE DEFINER=`root`@`localhost` TRIGGER `testecarros`.`teste_BEFORE_INSERT` BEFORE INSERT ON `reserva` FOR EACH ROW BEGIN call cnh_testes (new.veiculo,new.data_reserva,new.hora_reserva,new.previsao_volta,new.previsao_hora,new.destino,new.obs,new.condutor_id ); END ***************erro que me retorna quando faço a inserção********************************************** Not allowed to returna result set a tringger como resolvo isto? ******************************************************************* assim quero fazer essa validação no banco - (ai eu valido se a cnh esta vencida antes de inseri) (antes de fazer (inseri )quero validar algumas situações ) 1- se o condutor esta com a cnh vencida- que é a procedure acima 2- se o condutor pode dirigir o veiculo - se cnh do condutor e igual ou maior veiculo do 3- condutor não pode fazer reserva se o veiculo estiver reservado naquele horário ou entre hora de retorno tenho essa tabelas CREATE TABLE `cnh` ( `Id_cnh` int(11) NOT NULL AUTO_INCREMENT, `cnh_nome` char(2) DEFAULT NULL, PRIMARY KEY (`Id_cnh`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1; ************************ CREATE TABLE `cidade` ( `id_cidade` int(11) NOT NULL AUTO_INCREMENT, `Cidade` varchar(50) DEFAULT NULL, `uf` int(11) DEFAULT NULL, PRIMARY KEY (`id_cidade`), KEY `uf` (`uf`), CONSTRAINT `cidade_ibfk_1` FOREIGN KEY (`uf`) REFERENCES `uf` (`id_uf`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1; ************************ CREATE TABLE `condutor` ( `id_condutor` int(11) NOT NULL AUTO_INCREMENT, `nome_condutor` varchar(80) DEFAULT NULL, `id_departamento` int(11) DEFAULT NULL, `vencimento_cnh` date DEFAULT NULL, `telefone` varchar(11) DEFAULT NULL, `emai` varchar(80) DEFAULT NULL, `id_cnh` int(11) DEFAULT NULL, PRIMARY KEY (`id_condutor`), KEY `id_departamento` (`id_departamento`), KEY `id_cnh` (`id_cnh`), CONSTRAINT `condutor_ibfk_1` FOREIGN KEY (`id_departamento`) REFERENCES `departamento` (`id_departamento`), CONSTRAINT `condutor_ibfk_2` FOREIGN KEY (`id_cnh`) REFERENCES `cnh` (`Id_cnh`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; ************************ CREATE TABLE `veiculo` ( `id_veiculo` int(11) NOT NULL AUTO_INCREMENT, `tipo_veiculo` int(11) DEFAULT NULL, `placa` char(7) DEFAULT NULL, `cor` varchar(20) DEFAULT NULL, `km_veiculo_inical` int(11) DEFAULT NULL, `id_cnh` int(11) DEFAULT NULL, PRIMARY KEY (`id_veiculo`), KEY `tipo_veiculo` (`tipo_veiculo`), KEY `id_cnh` (`id_cnh`), CONSTRAINT `veiculo_ibfk_1` FOREIGN KEY (`tipo_veiculo`) REFERENCES `tipoveiculo` (`id_tipoveiculo`), CONSTRAINT `veiculo_ibfk_2` FOREIGN KEY (`id_cnh`) REFERENCES `cnh` (`Id_cnh`) ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1; ************************ CREATE TABLE `reserva` ( `id_reseva` int(11) NOT NULL AUTO_INCREMENT, `veiculo` int(11) DEFAULT NULL, `data_reserva` date DEFAULT NULL, `hora_reserva` time DEFAULT NULL, `previsao_volta` date DEFAULT NULL, `previsao_hora` time DEFAULT NULL, `destino` int(11) DEFAULT NULL, `cancela` char(1) DEFAULT NULL, `baixar_reserva` int(11) DEFAULT NULL, `obs` varchar(255) DEFAULT NULL, `condutor_id` int(11) DEFAULT NULL, PRIMARY KEY (`id_reseva`), KEY `veiculo` (`veiculo`), KEY `destino` (`destino`), KEY `baixar_reserva` (`baixar_reserva`), KEY `condutor_id` (`condutor_id`), CONSTRAINT `reserva_ibfk_1` FOREIGN KEY (`veiculo`) REFERENCES `veiculo` (`id_veiculo`), CONSTRAINT `reserva_ibfk_2` FOREIGN KEY (`destino`) REFERENCES `cidade` (`id_cidade`), CONSTRAINT `reserva_ibfk_3` FOREIGN KEY (`baixar_reserva`) REFERENCES `tipobaixa` (`id_tipo_baixa`), CONSTRAINT `reserva_ibfk_4` FOREIGN KEY (`condutor_id`) REFERENCES `condutor` (`id_condutor`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1; ************************
  15. Josieli

    Triggers

    Boa tarde Estou fazendo a matéria de banco de dados 2, e o professor passou um exemplo bem por cima de como criar trigger e porque usa-la, mas agora tentando criar sozinha para o trabalho, estou batendo cabeça com uma delas e gostaria de ajuda. Tenho as tabelas cidade e estado, e quero que quando um estado não esteja sendo referenciado por nenhuma cidade o mesmo seja excluido, mas a única coisa que consegui seguindo o exemplo que o professor passou é apagar praticamente tudo que foi inserido, ficando apenas o estado que não foi referenciado na tabela cidades, ou seja, ao contrario do que eu queria que o mesmo fizesse. Se puderem me ajudar create table estado( id_estado integer primary key, nome varchar(20) ); create table cidade( id_cidade integer primary key, nome varchar(20), id_estado integer references estado (id_estado) ); insert into estado values(1, 'Santa Catarina'); insert into estado values(2, 'Parana'); insert into estado values(3, 'Rio Grande do Sul'); insert into cidade values(1, 'Vitor Meireles', 1); insert into cidade values(2, 'Curitiba', 2); insert into cidade values(3, 'Dona Emma'); create trigger verifica_sem_municipio before insert on cidade For Each Row execute procedure apaga_estado(); create function apaga_estado() returns opaque as ' declare cd_estado integer; begin cd_estado := new.id_estado; if not exists(select * from cidade where id_estado = cd_estado) then delete from estado where id_estado = null; raise notice ''Estado % foi apagado'',cd_estado; end if; return null; End; ' language 'plpgsql';
  16. Caroa. Tenho a seguinte situação, servidor SRV-APP03, banco de dados origem (MP-OFC), Tabela SB2010, e outro banco, sevidor SRV-HML, banco de dados destino (MP-IFC), tabela C_INVENTORY_QUANT_INT. Fiz 3 trigger (insert, update e delete), que ao atualizar o estoque na tabela "SB2", replica a informação para a tabela "C_INVENTORY_QUANT_INT". Fiz os testes com utilizando o mesmo servidor, tudo ok, porem em servidores diferentes não consegui. alguém pode me ajudar: abaixo a trigger de update. OBS: Aqui está usando o banco MP11-SUP que está no mesmo servidor do MP-IFS, quando eu copio essa trigger para o outro servidor "SRV-APP03", atualizando no servidor "SRV-HML", gera um erro, pois não encontra o servidor destino. USE [MP11-SUP] GO /****** Object: Trigger [dbo].[trgAlteraEstoqueIFS] Script Date: 09/18/2014 11:10:28 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: João -- Create date: 04/06/2014 -- Description: Altera um registro na tabela C_INVENTORY_QUANT_INT Banco MP-IFS quando um registro for -- alterado na tabela SB2010 -- ============================================= ALTER TRIGGER [dbo].[trgAlteraEstoqueIFS] ON [MP11-SUP].[dbo].[sB2010] AFTER UPDATE AS BEGIN SET NOCOUNT ON DECLARE @RECNO INT SELECT @RECNO = R_E_C_N_O_ FROM inserted -- Verifica se o saldo em estoque para o Produto e Almoxarifado já existe na tabela do IFS IF (SELECT COUNT(*) FROM [sRV-HML].[MP-IFS].[dbo].[C_INVENTORY_QUANT_INT] WHERE INT_RECNO = @RECNO) = 0 -- Se não existir, cria o registro na tabela C_INVENTORY_QUANT_INT BEGIN INSERT INTO [sRV-HML].[MP-IFS].[dbo].[C_INVENTORY_QUANT_INT] ([iNT_PART_NO] ,[iNT_DESCRIPTION] ,[iNT_QTD_ONHAND] ,[iNT_LOCAL_NO] ,[iNT_SERIAL_NO] ,[iNT_LOT_BATCH_NO] ,[iNT_INVENTORY_VALUE] ,[iNT_TYPE] ,[iNT_RECNO]) SELECT dbo.SB1010.B1_COD, dbo.SB1010.B1_DESC, dbo.SB2010.B2_QATU, dbo.SB2010.B2_LOCAL, '', '', dbo.SB2010.B2_CM1, '1', dbo.SB2010.R_E_C_N_O_ FROM dbo.SB2010 INNER JOIN dbo.SB1010 ON dbo.SB1010.B1_COD=dbo.SB2010.B2_COD WHERE dbo.SB2010.D_E_L_E_T_ <> '*' AND dbo.SB1010.D_E_L_E_T_ <> '*' AND dbo.SB2010.R_E_C_N_O_ = @RECNO END ELSE -- Se exitir Efetua a atualização do Estoque e Custo médio no Item BEGIN UPDATE [sRV-HML].[MP-IFS].[dbo].[C_INVENTORY_QUANT_INT] SET INT_QTD_ONHAND = B2_QATU, INT_INVENTORY_VALUE = B2_CM1, INT_TYPE = '2' FROM [sRV-HML].[MP-IFS].[dbo].[C_INVENTORY_QUANT_INT] INNER JOIN dbo.SB2010 ON dbo.SB2010.R_E_C_N_O_ = INT_RECNO INNER JOIN dbo.SB1010 ON dbo.SB1010.B1_COD=dbo.SB2010.B2_COD WHERE dbo.SB2010.D_E_L_E_T_ <> '*' AND dbo.SB1010.D_E_L_E_T_ <> '*' AND dbo.SB2010.R_E_C_N_O_ = @RECNO END END
  17. Boa noite galera.. Estou com um problema que já está me tirando do sério. Desejo criar uma trigger que deverá inserir vários registros em uma tabela com base em uma outra, rsrs.. Em outras palavras é o seguinte: Tenho uma tabela que ao ser inserido um registro nela, ela vai consultar uma outra tabela, e se houver registro nessa consulta, a trigger deve inserir em uma terceira tabela um registro para cada registro presente na segunda. Segue uma tentativa de construir o código: DELIMITER $$ CREATE TRIGGER tgr_insertPriceProduct BEFORE INSERT ON precoprodutos FOR EACH ROW BEGIN SELECT count(*) INTO @verificador FROM produtos WHERE idRepresentada = NEW.idRepresentada; SET @i = 0; WHILE (@i < @verificador) DO BEGIN SELECT idProduto, preço INTO @idProduto, @preço FROM produto ORDER BY idProduto LIMITE @i,@i+1; INSERT INTO valoresprecosproduto (valorPrecoProduto, idPrecoProduto, idproduto) VALUES (@preço+5, NEW.idPrecoProduto, @idProduto); SET @i := @i+1; END; END$$ DELIMITER ; Erro: Ocorre o erro de sintaxe. Estou desde já grato.
×
×
  • Criar Novo...