Ir para conteúdo
Fórum Script Brasil

Denis Courcy

Moderadores
  • Total de itens

    3.089
  • Registro em

  • Última visita

Tudo que Denis Courcy postou

  1. Bom dia. Por favor poste o resultado do select abaixo: EXPLAIN SELECT cli.CLICOD, cli.CLINOM, cli.CLICPF, vda.CODVEN,vda.DATVEN, vda.NUMVEN, vda.CLIVEN, vda.QTDVEN, vda.VALVEN, vda.ESPVEN, vda.TOTVEN, vda.MARCADO, vda.CUPOM, IF(vda.CUPOM!='S' AND vda.MARCADO!='S',vda.QTDVEN,0) AS VENDAS_OUTRAS, IF(vda.CUPOM='S', vda.QTDVEN,0) AS VENDAS_CUPOM, IF(vda.MARCADO='S',vda.QTDVEN,0) AS VENDAS_NF, tv.CODVENDA, tv.ENTRADA_SAIDA FROM vendas AS vda LEFT JOIN clientes AS cli ON cli.CLICOD = vda.CLIVEN LEFT JOIN tvenda AS tv ON vda.NUMVEN = tv.CODVENDA WHERE vda.CODVEN = 1 AND vda.CODVEN !=0 order by vda.DATVEN DESC
  2. Crie uma procedure e passe os parâmetros necessários. DELIMITER $$ USE `meuBancoDeDados`$$ DROP PROCEDURE IF EXISTS `minhaProcedure`$$ CREATE PROCEDURE `minhaProcedure`(IN DataEmissao DATE) BEGIN SELECT DATA_EMIS, NRNF, TOTAL_VENDA FROM nf WHERE DATA_EMIS = DataEmissao; END$$ DELIMITER ;
  3. Basicamente é isso aqui: TRIGGER `tguDelete` AFTER DELETE ON `locacoes` FOR EACH ROW BEGIN DECLARE qtd SMALLINT UNSIGNED DEFAULT 0; SET qtd = (SELECT COUNT(id_locacao) FROM locacoes WHERE codigo_filme = OLD.codigo_filme); IF qtd = 1 THEN UPDATE filmes SET situacao = 'Disponivel' WHERE id_locacao = OLD.id_locacao; END IF; END;
  4. Na linha 1 remova o ponto e virgula; Na linha 6 coloque virgula após auto_increment.
  5. faça backup antes de fazer qualquer alteração. Não nos responsabilizamos por erros em seus dados. A instrução abaixo deverá resolver seu problema: update problemas p inner join prob_tipo_0 t on p. problema =t. probt0_desc SET p.problema = t. probt0_cod
  6. Crie uma coluna saldo e atualize esta coluna com um trigger. Assim, a cada lançamento o sistema terá, automaticamente, o saldo atualizado.
  7. O símbolo % deve ser representado por \%
  8. Você já verificou a integridade das tabelas com o phpadmin ou outro sgbd para mysql?
  9. Verifique se a tabela empresas possui indices para os campos id e razão (um índice para cada campo) tabela clientes_old possui indices para campos id_emp,opcao,ano,mes,dia (um indice para todos estes campos) Se a tabela clientes_old for muito grande, verifique, também, se há indice para o campo nome tabela clientes_old possui indices para campos id_emp,setor,exame_clinico,opcao,ano,mes,dia (um indice para todos estes campos) tabela empresas_setores id,setor,funcao (um indice para todos estes campos) Rode cada um dos selects, dentro do phpadmin ou outro sgbd, com a palavra EXPLAIN antes da palavra SELECT e poste o resultado se as ações acima não melhorarem o tempo de execução de seu relatório.
  10. Boa tarde Ricardo, Não há relacionamentos explícitos quando engine é MyISAM. O engine utilizado para manter integridade referencial é o InnoDB. O banco information_schema é virtual, e proprietário do MySQL. É montado quando do start do MySQL. As informações de relacionamentos de todos os bancos de seu MySQL estão na tabela TABLE_CONSTRAINTS do banco information_schema.
  11. Bom dia, Lailaaguiar Não entendi esta parte de seu questionamento. Poderia explicar melhor, por favor? A que tabela pertence o campo lavtotalfun?
  12. Denis Courcy

    Trigger

    Por que você não desenvolve todo o código de gravação em stored procedure?
  13. Faça assim: SELECT ip, COUNT(DISTINCT porta) from nomeDaMinhaTabela GROUP BY ip HAVING COUNT(DISTINCT porta) > 1
  14. Acrescente mais um comando que eu esqueci de colocar. Após a linha do END WHILE; Coloque CLOSE cur1; para fechar o cursor.
  15. Basicamente é isso: DELIMITER $$ CREATE PROCEDURE `nomedobanco`.`ATUALIZA_ESTOQUE_ENTRADA`(IN RCODENTRADA INTEGER) BEGIN DECLARE VCODENTRADA INTEGER; DECLARE VCODOBRA INTEGER; DECLARE VCODPROD INTEGER; DECLARE VQTDE FLOAT; DECLARE VVRUNITARIO NUMERIC(15,2); DECLARE VCODCLIENTE INTEGER; DECLARE VSTATUS VARCHAR(20); DECLARE VTIPO CHAR(1); DECLARE done INT DEFAULT FALSE; DECLARE cur1 CURSOR FOR SELECT I.codentrada, I.codobra, I.codproduto, I.quantidade, I.vrunitario FROM ITENSENTRADA I WHERE I.codentrada = RCODENTRADA; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur1; FETCH cur1 INTO VCODENTRADA, VCODOBRA, VCODPROD, VQTDE, VVRUNITARIO; WHILE NOT done DO SET vtipo = 'E'; SELECT E.codcliente, e.status INTO vcodcliente, vstatus FROM ENTRADA e WHERE E.codentrada = rcodentrada; IF NOT (vstatus = 'ABERTA' OR vstatus = 'FINALIZADA') THEN UPDATE entrada e SET e.status = 'FINALIZADA' WHERE E.codentrada = rcodentrada; UPDATE PRODUTO P SET P.estoque = P.estoque + vqtde, P.vrunitario = vvrunitario WHERE P.codproduto = vcodprod; INSERT INTO HISTORICOCLIENTES(CODMOV, CODCLIENTE, CODPRODUTO, QTDE, CODOBRA, TIPO) VALUES (vcodentrada, vcodcliente, vcodprod, vqtde, vcodobra, vtipo); INSERT INTO HISTORICOPRODUTO (CODMOV, CODOBRA, CODCLIENTE, CODPROD, QTDE, VALOR, TIPO) VALUES (vcodentrada, vcodobra, vcodcliente, vcodprod, vqtde, vvrunitario, vtipo); END IF; FETCH cur1 INTO VCODENTRADA, VCODOBRA, VCODPROD, VQTDE, VVRUNITARIO; END DO; END$$
  16. Entre como root e insira seu usuário na tabela user do banco mysql
  17. Faça assim: DELETE FROM nf_detalhe WHERE nf_detalhe.nfd_nfm IN (SELECT DISTINCT nf_mestre.id FROM nf_medtre WHERE nfm_dom = 35);
  18. Sim. Use o programa Mysqldump que vem na instalação do Mysql. Leia a documentação para mais detalhes e poste aqui suas dúvidas.
  19. O uso de um relacionamento muitos para muitos com barco e balsa resolve este problema. Crie uma tabela barcoxbalsa (idBarco,idBalsa) e coloque aqui a composição que você está selecionando e você coseguirá listar usando inner join entre esta tabela e as tabelas barco e balsa.
  20. Mostra a estrutura da tabela interditado Neste caso não é trigger. É select.
  21. Faça assim: CREATE TRIGGER Crypt_Decrypt before insert on interditado FOR EACH ROW begin SET NEW.nome := aes_encrypt(NEW.nome, 'MIICeQIBADANBgkqhkiG9w0BAQEFAASC'); SET NEW.cpf := aes_encrypt(NEW.cpf, 'MIICeQIBADANBgkqhkiG9w0BAQEFAASC'); SET NEW.nome_pai := aes_encrypt(NEW.nome_pai, 'MIICeQIBADANBgkqhkiG9w0BAQEFAASC'); SET NEW.nome_mae := aes_encrypt(NEW.nome_mae, 'MIICeQIBADANBgkqhkiG9w0BAQEFAASC'); end; Crie outro trigger para before update, igual a este.
  22. O trigger de insert não tem valores antigos (OLD) O trigger de delete não tem valores novos (NEW) O que você precisa é de um trigger que ocorra antes de um update. (before update) Onde voce poderá comparar valores novos e antigos. Deverá ser BEFORE pois a comparação deve ocorrer antes da gravação. Depois disso não haverá valores NEW. DELIMITER $$ CREATE TRIGGER `nomedobanco`.`meutriggerdeupdate` BEFORE UPDATE ON `meubanco`.`minhatabela` FOR EACH ROW BEGIN IF NEW.natureza <> OLD.natureza THEN grave aqui END IF; END$$ DELIMITER ;
  23. Tab_Comentario deverá ter uma chave estrangeira para tab_Filme. Estude sobre relacionamento "um para muitos" e você verá que é fácil manter somente duas abelas para esta finalidade.
×
×
  • Criar Novo...