-
Total de itens
3.089 -
Registro em
-
Última visita
Posts postados por Denis Courcy
-
-
Boa noite.
Você pode criar esta procedure
DELIMITER $$ CREATE PROCEDURE `bd`.`exemplo`(IN variavel VARCHAR(100)) BEGIN SET @preparable_stmt = CONCAT("SELECT max(aging_liberacao) as aging_lib FROM bd.gd_ob WHERE projeto = '00003' AND mrp IN(", variavel, ")"); PREPARE stmt FROM @preparable_stmt; EXECUTE stmt; -- DEALLOCATE PREPARE stmt; END$$ DELIMITER ;
e executá-la assim:
CALL exemplo('"O08",'"OM2"');
-
Não.
Faça assim:
ALTER TABLE turma ADD UNIQUE KEY nomeDoIndice (idTurma, Horainicio, Curso_idCurso);
Este índice impedirá que haja a duplicidade indesejada.
-
O MySQL não permite este tipo de validação.
A solução que adotei em meus sistemas foi realizar toda e qualquer gravação através de procedures, que podem retornar um result set de um select.
Veja abaixo um exemplo:
DELIMITER $$ USE `meudatabase`$$ DROP PROCEDURE IF EXISTS `exemplo_crud`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `exemplo_crud`(IN Acao CHAR(1), IN pidExemplo INTEGER, IN pnmExemplo VARCHAR(50), IN ptxExemplo DOUBLE(6,3), IN pvlMinimo DOUBLE(8,2), IN pndExemplo CHAR(1), IN pidDominioSituacao INTEGER) BEGIN DECLARE msg VARCHAR(1000) DEFAULT "sem mensagem"; DECLARE excecao SMALLINT DEFAULT ; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1; IF pnmExemplo = "" OR (Acao <> "I" AND pidExemplo = ) THEN SET msg = "Erro na passagem de parametros"; ELSE START TRANSACTION; /*Inclusao */ IF Acao = "I" THEN INSERT INTO exemplo(nmExemplo, txExemplo, vlMinimo, ndExemplo, idDominioSituacao) VALUES (pnmExemplo, ptxExemplo, pvlMinimo, pndExemplo, pidDominioSituacao); IF excecao = 1 THEN SET msg = "MySQL: Erro ao inserir na tabela de exemplo"; ROLLBACK; END IF; END IF; IF excecao <> 1 THEN IF Acao <> "I" THEN SET @idExemplo = pidExemplo; END IF; /*Alteracao*/ IF Acao = "A" THEN UPDATE exemplo SET nmExemplo = pnmExemplo, txExemplo = ptxExemplo, vlMinimo = pvlMinimo, ndExemplo = pndExemplo, idDominioSituacao = pidDominioSituacao WHERE idExemplo = @idExemplo; IF excecao = 1 THEN SET msg = "MySQL: Erro ao atualizar exemplo"; ROLLBACK; END IF; END IF; END IF; /*Exclusao*/ IF excecao <> 1 THEN IF Acao = "E" THEN DELETE FROM exemplo WHERE idExemplo = @idExemplo; IF excecao = 1 THEN SET msg = "MySQL: Erro ao excluir exemplo"; ROLLBACK; END IF; END IF; END IF; /*Se tudo deu certo, então finaliza confirmando a gravacao.*/ IF excecao <> 1 THEN COMMIT; IF Acao = "I" THEN SET msg = "MySQL: Exemplo Incluido com sucesso"; ELSE IF Acao = "A" THEN SET msg = "MySQL: Exemplo Alterado com sucesso"; ELSE SET msg = "MySQL: Exemplo Excluido com sucesso"; END IF; END IF; END IF; END IF; SELECT msg AS msg; END$$ DELIMITER ;
-
Não foi possível ler a query que está na imagem. Poderia transcrevê-la(copiar e colar) aqui, por favor?
-
5 horas atrás, fabioweb disse:
O sistema não deve permitir que o aluno esteja no mesmo curso e horário.
Existe alguma forma de resolver isso pelo MySQL?
Segundo seu modelo, a criação de uma UNIQUE KEY, na tabela Turma, que contemple os campos idTurma, HoraInicio e Curso_IdCurso resolverá o problema.
-
Tente assim:
1 - Pare o serviço do mysql
2 - Salve os arquivos em outra pasta (lembre-se de salvar o database de serviço: mysql; os arquivos ib_logfile0, ib_logfile1 e ibdata1) e o seus databases
que dependendo da versão, estão na pasta C:\Documents and Settings\All Users\MySQL\data
3 - reinstale o mysql e reinicie o serviço
4 - teste se esta funcionando.
5 - se estiver funcionando pare o serviço do mysql
6 - copie os arquivos de volta
7 - reinicie o serviço
-
No Delphi eu uso
mysqldump --opt --flush-logs --triggers --port=3306 --user=root --result-file=backup.sql --databases "meuBancoDeDados"
--result era uma recomendação da MySQLA/B para formação de nomes de backups em windows. (Diferente do > no linux).
Para recuperação de backup eu uso o gerenciador de linha que trabalha no console do cmd
em c:\ ou no diretório onde estiver meu backup, entro em
mysql -u root -p
no prompt mysql>
eu digito source nomedomeubackup.sql
digito enter e espero o termino
saia com quit
-
Ok.
Corrija para :
SELECT CODPRO, NOMPRO, COMPRADO, VENDIDO, (COMPRADO - VENDIDO) AS ESTOQUE FROM (SELECT prd.CODPRO, prd.NOMPRO, SUM(comp.QTDE_COMPRADA) AS COMPRADO, SUM(vds.QTDVEN) AS VENDIDO FROM PRODUTOS prd LEFT JOIN COMPRAS comp ON comp.COD_PRODUTO = prd.CODPRO LEFT JOIN VENDAS vds ON vds.CODVEN = prd.CODPRO GROUP BY prd.CODPRO ) e;
-
Tenta assim:
SELECT CODPRO, NOMPRO, COMPRADO, VENDIDO, (COMPRADO - VENDIDO) AS ESTOQUE FROM (SELECT prd.CODPRO, prd.NOMPRO, SUM(comp.QTDE_COMPRADA) AS COMPRADO, SUM(vds.QTDVEN) AS VENDIDO FROM PRODUTOS prd LEFT JOIN COMPRAS comp ON comp.COD_PRODUTO = prd.CODPRO LEFT JOIN VENDAS vds ON vds.CODVEN = prd.CODPRO ) e;
depois faremos a segunda parte
-
Faça assim:
DROP INDEX nome_indice ON nome_tabela
ou assim:
ALTER TABLE nomeDaTabela DROP INDEX nome_indice
-
Claro que é possível. Estude "Stored Procedures" e "Prepared Statements".
-
Crie um usuário root@% e conceda a ele os direitos necessários.
O @% indicará que o root está acima de qualquer IP.
O melhor será você criar um usuário sistema@% para que seja acessado por seu sistema e não precise usar o root para isso.
-
Tente assim:
SELECT * FROM (SELECT * FROM tbVenda WHERE venData BETWEEN "2016-01-01 06:00:00" AND "2016-01-31 23:59:59") t1 WHERE TIME(tbVenda) BETWEEN "06:00:00" AND "16:00:00";
-
Faça assim:
UPDATE nomeDaTabela SET nomeDoCampo = REPLACE(TRIM(nomeDoCAMPO)," ", "_");
Onde:
nomeDaTabela é o nome da tabela que você deseja alterar e
nomeDoCampo é o nome do campo que contem o produto.
Esta alteração afetará todos os registros da tabela.
-
Tenta assim:
SELECT tbc.codcongregacao, tbc.codigocongregacao, tbc.nomecongregacao, (SELECT SUM(mis.valormissoes) FROM tbcongregacao tbc1, tbmissoes mis WHERE tbc1.codcongregacao = '1' AND tbc1.codcongregacao = mis.codcongregacao AND mis.datamissoes BETWEEN '2016-02-01' AND '2016-02-2016') + (SELECT SUM(diz.valordizimo) FROM tbcongregacao tbc2, tbdizimo diz WHERE tbc2.codcongregacao = '1' AND tbc2.codcongregacao = diz.codcongregacao AND diz.mesdizimo BETWEEN '2016-02-01' AND '2016-02-2016') + (SELECT SUM(vot.valorvoto) FROM tbcongregacao tbc3, tabvotos vot WHERE tbc3.codcongregacao = '1' AND tbc3.codcongregacao = vot.codcongregacao AND vot.mesvoto BETWEEN '2016-02-01' AND '2016-02-2016') + (SELECT SUM(rec.valorreceita) FROM tbcongregacao tbc4, tabreceita rec WHERE tbc4.codcongregacao = '1' AND tbc4.codcongregacao = rec.codcongregacao AND rec.mesreceita BETWEEN '2016-02-01' AND '2016-02-2016') AS receitas, (SELECT SUM(des.valordespesas) FROM tbcongregacao tbc5, tbdespesas des WHERE tbc5.codcongregacao = '1' AND tbc5.codcongregacao = des.codcongregacao AND des.datadespesas BETWEEN '2016-02-01' AND '2016-02-2016') AS despesas FROM tbcongregacao tbc
Existe forma mais inteligente de fazer isso. Mas seria necessário ver a estrutura e os dados para gerar.
-
Vamos analisar um pouco.
Primeiro modifique a cláusula where da forma
WHERE month(v.dtvenda) = '2' and c.sr_deleted=''
para
WHERE v.dtvenda BETWEEN 2026-02-01 AND 2016-02-29 and c.sr_deleted=''
Vai evitar que sua consulta entre em TABLE SCAN.
Segundo, para efeito de teste, inclua o campo calculado qtRegistros, conforme abaixo:
SELECT v.dtvenda, c.numnven, round(sum(c.quantid*c.prcompr),2) as COMPRAS, v.totalve as VENDAS from infvenda v, COUNT(v.dtvenda) AS qtRegistros
Vai trazer a quantidade de registros somados para que você possa verificar se sua consulta está fazendo realmente o que você quer.
Compare os qtRegistros do dia 23 com o select abaixo:
SELECT v.dtvenda, c.numnven, round(c.quantid*c.prcompr,2) as COMPRAS, v.totalve as VENDAS from infvenda v JOIN nvendas c on (v.dtvenda = c.dtvenda and v.numnven = c.numnven) WHERE v.dtvenda = '2016-02-23' and c.sr_deleted=''
-
Oi Eder,
Uso windows 7. baixei de http://downloads.mysql.com/archives/community/
-
Na tabela Generalizada Clientes coloque somente os atributos que são comuns aos dois tipos de especialização que você quer e mais um atributo que informará se a especialização é Pessoa Fisica e ou Juridica. (Vou chamar de indicadorDePessoa com domínio F ou J)
Exemplo: idCliente, indicadorDePessoa, Nome, Endereço(se for um só), etc.
Na tabela de especialização Pessoa Fisica coloque somente os atributos que são específicos desta especialização
Exemlo: idCliente(FK com relação 1:1 para Cliente), CPF, Sexo, Identidade, etc
Na tabela de especialização Pessoa Jurídica coloque somente os atributos que são específicos desta especialização
Exemplo: idCliente(FK com relação 1:1 para Cliente), CNPJ, Nome Fantasia, InscEstadual, Etc.
Quando você criar uma compra para um cliente específico o que vai entrar é o idCliente, que será a FK para a tabela de clientes.
Informe se precisar mais.
-
Publique, por favor, as estruturas das tabelas.
-
Esta não é uma dúvida de MySQL. É de PHP.
Movendo MySQL-->>PHP
-
Está informando não existe o campo CODIGO na tabela Qusuario em seu banco de dados.
-
Esta sintaxe está errada.
convert (varchar (8), @data, 112)
Verifique o manual do mysql de sua versão para achar uma função mais apropriada.
-
Faça o último. Os primeiros são para você saber como cheguei lá:
-- listar datas que possuem mais de um evento por data SELECT DATE(e2.setup) AS `dtEvent` FROM eventassist.event e2 GROUP BY `dtEvent` HAVING COUNT(e2.event_id) > 1; -- Listar a informação dos eventos SELECT e1.setup, e1.event_id, e1.setup, e1.teardown, e1.event_type_id FROM eventassist.event e1; -- Listando o que voce quer: SELECT e1.setup, e1.event_id, e1.setup, e1.teardown, e1.event_type_id FROM eventassist.event e1 WHERE DATE(e1.setup) IN (SELECT DATE(e2.setup) AS `dtEvent` FROM eventassist.event e2 GROUP BY `dtEvent` HAVING COUNT(e2.event_id) > 1);
-
Que outras informações você precisa?
Pelo que você postou já te passei instruções suficientes para que você faça todo o exercício.
Executar select de ultimimo registro utiizando "IF" (condição se e somente se).
em MySQL
Postado
Tente assim:
SELCT MAX(numero_linha) FROM relacao_atividade GROUP BY id_relatorio HAVING id_status = '1' AND (resp_1 = '1' OR resp_2 = '1' OR resp_3 = '1' OR resp_4 = '1')
O filtro na cláusula HAVING é acionado APÓS o processamento do GROUP BY.
O filtro na cláusula WHERE é acionado ANTES do processamento do GROUP BY.