-
Total de itens
3.089 -
Registro em
-
Última visita
Tudo que Denis Courcy postou
-
Este não é um erro do MySQL. Transferindo para o forum de PHP.
-
Minha opinião é que os dados sejam validados no model, sempre. Pois concordo com a tese de que apenas o model sabe como seus dados se comportam e, se você descreve seus campos de dados no model, você deve descrever as regras de validação para estes campos no mesmo lugar.
-
Tente assim: select quantidade INTO @qtd from vendas_produto where vendas_produto.codigo_venda = OLD.codigo; select select distinct codigo_produto INTO @codProd from vendas_produto where vendas_produto.codigo_venda = OLD.codigo; update produtos set produtos.estoque = produtos.estoque + @qtd where produtos.codigo=@codprod; Informe onde está ocorrendo o erro de multiplicidade de registros.
-
(Resolvido) Como parar a execução da Trigger
pergunta respondeu ao Jordano Cherobim de Denis Courcy em MySQL
Para forçar um erro em um trigger basta atribuir NULL a um campo NOT NULL. Segue abaixo um exemplo de como eu executo CUD(Create, Update, Delete) /* Criação tabela exemplo */ CREATE TABLE exemplo( idExemplo INT UNSIGNED NOT NULL AUTO_INCREMENT, dsExemplo VARCHAR(50) NOT NULL, PRIMARY KEY (idExemplo) )ENGINE InnoDB; DELIMITER $$; DROP PROCEDURE IF EXISTS `meuBancoDeDados`.`exemploCUD`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `exemploCUD`(IN Acao CHAR(1), IN pidExemplo INTEGER, IN pdsExemplo VARCHAR(50)) BEGIN DECLARE msg VARCHAR(1000) DEFAULT "sem mensagem"; DECLARE excecao SMALLINT DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1; /* faça aqui a verificação de suas regras de negocio para gravação desta tabela*/ IF pdsExemplo = "" OR (Acao <> "I" AND pidExemplo = 0) THEN SET msg = "Erro na passagem de parametros"; ELSE START TRANSACTION; /*Inclusao*/ IF Acao = "I" AND excecao = 0 THEN INSERT INTO exemplo(dsExemplo) VALUES (pdsExemplo); IF excecao = 1 THEN SET msg = "Erro ao inserir na tabela exemplo"; ROLLBACK; END IF; END IF; IF Acao <> "I" AND excecao = 0 THEN SET @idExemplo = pidExemplo; END IF; /*Alteracao*/ IF Acao = "A" and excecao = 0 THEN UPDATE exemplo SET dsExemplo = pdsExemplo WHERE idExemplo = @idExemplo; IF excecao = 1 THEN SET msg = "Erro ao atualizar"; ROLLBACK; END IF; END IF; /*Exclusao*/ IF Acao = "E" and excecao = 0 THEN DELETE FROM exemplo WHERE idExemplo = @idExemplo; IF excecao = 1 THEN SET msg = "Erro ao excluir"; ROLLBACK; END IF; END IF; /*Se tudo deu certo, então finaliza confirmando a gravação.*/ IF excecao = 0 THEN COMMIT; IF Acao = "I" THEN SET msg = "Incluido com sucesso"; ELSE IF Acao = "A" THEN SET msg = "Alterado com sucesso"; ELSE SET msg = "Excluido com sucesso"; END IF; END IF; END IF; END IF; SELECT msg AS msg; END$$ DELIMITER ;$$ -
(Resolvido) Como parar a execução da Trigger
pergunta respondeu ao Jordano Cherobim de Denis Courcy em MySQL
Em vez de fazer por trigger faça por storage procedure. É mais prático, seguro, mais controlável, pode emitir mensagem de retorno e, ao contrário do que o DavilX falou no tópico anterior, controles de regras de negócio, não sobrecarregam o servidor. -
(Resolvido) Problemas com importação de tabela e
pergunta respondeu ao chrystoffer de Denis Courcy em MySQL
chrystoffer, Você precisa corrigir a entrada. O programa que gera o csv. É lá que está o problema. Não adianta corrigir o lado da importação de dados. -
Pelo que vi, o único campo usado por este select é o content.id. substitua o trecho ORDER BY content. DESC LIMIT 5,20;porORDER BY content.id DESC LIMIT 5,20;Se você não for capaz disso, peça a quem gerou o código, que faça pra você.
- 7 respostas
-
- Erro 1064
- You have an error in your SQL
- (e %d mais)
-
Não era o que eu queria. Mas acho que posso te ajudar com o que você colocou em seu post inicial. No seu sql, descrito no post inicial e reproduzido abaixo: SELECT content.id AS id FROM nc0r8_k2_items AS content WHERE content.published = 1 AND content.trash = 0 AND content.access IN (1,1) AND ( content.publish_up = '0000-00-00 00:00:00' OR content.publish_up <= '2015-07-23 17:56:24' ) AND ( content.publish_down = '0000-00-00 00:00:00' OR content.publish_down >= '2015-07-23 17:56:24' ) AND ( content.catid = 88 ) AND content.language in ('en-GB','*') ORDER BY content. DESC LIMIT 5,20;Está faltando um campo para o order by na linhaORDER BY content.???esta faltando um campo aqui??? DESC LIMIT 5,20;
- 7 respostas
-
- Erro 1064
- You have an error in your SQL
- (e %d mais)
-
Mostre o sql que originou este erro
- 7 respostas
-
- Erro 1064
- You have an error in your SQL
- (e %d mais)
-
(Resolvido) Dúvida ao testar stored procedure com call
pergunta respondeu ao Porter de Denis Courcy em MySQL
Está faltando o id aqui: call alter_cad_for(?cade o id?, "rua 7","emp padrão ltda","empforte","são fco","pirapora","sp","99999-999","porter_email","999999","88888"); -
(Resolvido) Problemas com importação de tabela e
pergunta respondeu ao chrystoffer de Denis Courcy em MySQL
Se está faltando linhas, é porque o arquivo csv está sem o \n na terminação de alguma linha de registro. Verifique o programa que está gerando o csv ou questione quem está gerando o csv Se estiver sobrando linhas, então é porque o arquivo csv está com \n onde não deveria e está gerando registro de forma incompleta. Peça ou faça um teste gerando o csv com algum outro caracter no fim do registro. Tipo @ ou # e faça a carga com load data infile usando este caracter como sinalizador de fim de linha(registro) -
(Resolvido) Problemas com importação de tabela e
pergunta respondeu ao chrystoffer de Denis Courcy em MySQL
Sim. por isso aconselhei que você importasse para uma tabela com um único campo varchar(1000) por registro. Voce esta usando o load data infile para importação? Se sim faça assim: create table tempimport( linha varchar(1000) )engine MyISAM; LOAD DATA INFILE 'file_name.txt' INTO TABLE tempimport LINES TERMINATED BY '\r\n'; Use \r\n se estiver usando windows como seu sistema operacional ou\n se fou outro sistema operacional. Após importar paraa tabela temporária trate a importação para a tabela definitiva usando uma storage procedure ou sua liguagem de programação preferida. -
(Resolvido) Problemas com importação de tabela e
pergunta respondeu ao chrystoffer de Denis Courcy em MySQL
Vale a pena criar uma tabela temporária, com engine MyISAM, com um único campo, para receber cada linha de seu csv e tratar, em um segundo momento, estes registros para a tabela definitiva. -
(Resolvido) Problemas com importação de tabela e
pergunta respondeu ao chrystoffer de Denis Courcy em MySQL
Quando você remove após a importação de csv para mysql? Ou seja, após estar em sua base de dados mysql? -
faça assim: select `engine` from information_schema.tables where table_schema="SeuBancoDeDados" AND table_name = "NomeDeSuaTabela"
-
de o seguinte comando para autorizar o usuario a usar a procedure: GRANT EXECUTE ON PROCEDURE `NomeDoBancoDeDados`.`banco_de_talentos_export` TO `usuario`@`ip`;
-
(Resolvido) UPDATE e INNER JOIN em um banco muito grande
pergunta respondeu ao chrystoffer de Denis Courcy em MySQL
Para completar e responder sua pergunta. Tabela temporárias devem ser criadas em momentos especiais, como este, comum objetivo específico e para serem utilizadas por um breve período. Elas podem ser físicas, de preferencia com engine MyISAM, quando a quantidade de dados for muito grande; e podem ser virtuais, com engine MEMORY, quando a quantidade de dados form pequena. No seu caso a necessidade de evitar o table scan, que estava ocorrendo, foi a razão principal para o uso deste tipo de tabela. -
(Resolvido) UPDATE e INNER JOIN em um banco muito grande
pergunta respondeu ao chrystoffer de Denis Courcy em MySQL
Pelo que você postou, eu criaria uma tabela temporária com este select SELECT CD_ORGAO FROM e13cv_teste GROUP BY CD_ORGAO E um índice por CD_ORGAO para atender o inner join deste trecho: ) m ON n.CD_ORGAO = m.CD_ORGAO INNER JOIN e13m_teste o ON n.CD_ORGAO = o.CD_ORGAOSeu inner join atual está deteriorado por falta de índice e está realizando table scan no resultado do select acima a cada linha lida em e13cv_teste.Esta é a causa da lentidão. -
(Resolvido) UPDATE e INNER JOIN em um banco muito grande
pergunta respondeu ao chrystoffer de Denis Courcy em MySQL
MOstre as estruturas das tabelas -
Só criando um trigger
-
Movendo MySQL -->>PHP
-
(Resolvido) Como inserir com stored procedure em duas tabelas
pergunta respondeu ao Porter de Denis Courcy em MySQL
Coloque suas tabelas no engine InnoDB. Faça assim: DELIMITER $$ DROP PROCEDURE IF EXISTS cad_for $$ CREATE PROCEDURE cad_for( IN p_endereco varchar(40), IN p_razsocial varchar(40), IN p_nomefantasia varchar(40), IN p_bairro varchar(40), IN p_cidade varchar(30), IN p_uf varchar(2), IN p_cep varchar(9), IN p_email varchar(50), IN p_cnpj varchar(14), IN p_ie varchar(10) ) BEGIN DECLARE msg VARCHAR(1000) DEFAULT "sem mensagem"; DECLARE excecao SMALLINT DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1; START TRANSACTION; INSERT INTO pessoas(endereco, razsocial, nomefantasia, bairro, cidade, uf, cep, email) VALUES(p_endereco, p_razsocial, p_nomefantasia, p_bairro, p_cidade, p_uf, p_cep, p_email); IF excecao = 1 THEN SET msg = "ALERTA: Erro ao inserir na tabela de pessoas"; ROLLBACK; ELSE SELECT DISTINCT LAST_INSERT_ID() INTO @idPessoas FROM pessoas; IF excecao = 1 THEN SET msg = "ALERTA: Erro ao buscar o ultimo ID inserido em pessoas"; ROLLBACK; ELSE INSERT INTO fornecpj(cnpj, ie, pessoa_id) values(p_cnpj, p_ie, @idPessoas); IF excecao = 1 THEN SET msg = "ALERTA: Erro ao inserir na tabela de fornecpj"; ROLLBACK; END IF; END IF; END IF; IF excecao <> 1 THEN COMMIT; SET msg = "ALERTA: Registro Incluido com sucesso"; END IF; SELECT msg AS msg; END$$ -
Está correto.
-
Qual comando você está dando para obter esta mensagem em retorno?
-
Quem quiser ajudar que o faça por MP.