shelter Postado Junho 7, 2008 Denunciar Share Postado Junho 7, 2008 Boa galera, e aí na boa?Preciso muito da colaboração dos amigos.Aqui tenho uma tabela com os seguintes campos.Ramal ( DECIMAL ).N_discado ( DECIMAL ).Tronco ( DECIMAL ).Duracao ( TIMESTAMP ).Ramal N_discado Tronco Duracao 201 25165660 10 2005-06-05 00:00:22Qual a pior missão que tenho hoje?Preciso que as primeiros 00:00:30 segundos tenho o valor de R$ 0,50 e que a cada 6 segundos ele some R$ 0,10.Vou dar um exemplo:Uma ligação com duração de 00:00:22 igual a R$ 0,50.Uma ligação com duração de 00:00:30 igual a R$ 0,50.Uma ligação com duração de 00:00:42 igual a R$ 0,70.Solicito a ajuda dos amigos, pois não estou sabendo nem como começar.Vlw galera.Abraços Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Junho 9, 2008 Denunciar Share Postado Junho 9, 2008 Oi, 'shelter'!Escrevi uma rotina que te possibilitará obter o resultado como umm campo calculado.Ela funcionará em qualquer versão do MySQL igual ou superior a 5.0.x.Deve ser implementada diretamente no banco.DELIMITER $$; DROP FUNCTION IF EXISTS `BancoDeDados`.`ValorApagar`$$ CREATE FUNCTION ` BancoDeDados `.`ValorApagar` (Campo Timestamp) NO SQL RETURN double; BEGIN declare Tempo Time; declare Seg integer; declare Valor double; Set Tempo = Time(campo); Set Seg = Hour(Tempo) * 3600; Set Seg = Seg + (Minute(Tempo) * 60); Set Seg = Seg + Second(Tempo) If Seg < = 30 then Set Valor = 0.50; Else Set Seg = Seg - 30; Set Valor = 0.50 + (0.10 * (Seg Div 6)); If (Seg Mod 6) <> 0 then Set Valor = Valor + 0.10; End if; End if; ValorApagar = Valor; END$$ DELIMITER;$$ Link para o comentário Compartilhar em outros sites More sharing options...
0 shelter Postado Junho 9, 2008 Autor Denunciar Share Postado Junho 9, 2008 Não entedi como eu faria para agregrar esta função em uma conculta, pois tenho que exibir assim:Ramal N_discado Tronco Duracao Valor201 25165660 10 2005-06-05 00:00:22 0,50205 25189610 15 2005-06-05 00:00:40 0,60etc...desculpa a minha ignorancia , pois não sei efetuar função no bd.+ por favor me ajuda aí.abraços e muito obrigado desde já Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Junho 9, 2008 Denunciar Share Postado Junho 9, 2008 'shelter', No front end que você usa para manipular as tabelas no mysql, coloque o texto da função dentro da área onde você digitaria um código SQL,substitua o termo 'BancoDeDados' pelo nome de seu banco de dados eexecute o código.Depois disso, para obter o que você mencionou, digite e execute a seguinte instrução sql:SELECT Ramal, N_discado, Tronco, Duracao, ValorApagar(Duracao) AS Valor FROM tabela Link para o comentário Compartilhar em outros sites More sharing options...
0 shelter Postado Junho 12, 2008 Autor Denunciar Share Postado Junho 12, 2008 Caro amigo denis agradeço a sua ajuda desde já , mais não estou conseguindo ( melhor sabendo ) efetuar esta função no banco ,haveria uma forma que não fosse com esta função .ex.: um select . aí eu etenho + dominio.obrigadoObraços Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Junho 12, 2008 Denunciar Share Postado Junho 12, 2008 Caro amigo denis agradeço a sua ajuda desde já , mais não estou conseguindo ( melhor sabendo ) efetuar esta função no banco ,haveria uma forma que não fosse com esta função .ex.: um select . aí eu etenho + dominio.obrigadoObraçosVocê carregou a função? Ela já faz parte do banco como expliquei no post #4? Link para o comentário Compartilhar em outros sites More sharing options...
0 shelter Postado Junho 12, 2008 Autor Denunciar Share Postado Junho 12, 2008 Então foi o que te falei ....não sei como?Sou iniciante .. Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Junho 12, 2008 Denunciar Share Postado Junho 12, 2008 Então foi o que te falei ....não sei como?Sou iniciante ..Sou insistente.Qualquer linguagem de programação poderia abrigar o código com as devidas alterações para a execução do mesmo. mas você tem uma ferramenta pederosa e gurdar esta função no banco de dados dará portabilidade a execução de suas consultas.Então, se você não sabe, esta é uma boa ocasião para aprender.Vamos ter um montão te posts até que você aprenda ou desista.Primeiro responda qual o front end que você usa para manipular as tabelas do mysql? Programas Front End Mysql SqlYog é o meu preferido. Link para o comentário Compartilhar em outros sites More sharing options...
0 shelter Postado Junho 13, 2008 Autor Denunciar Share Postado Junho 13, 2008 Então denis,eu utilizo o MYSQL Query Browser... Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Junho 13, 2008 Denunciar Share Postado Junho 13, 2008 Então denis,eu utilizo o MYSQL Query Browser...OK.Entre no query browser,selecione seu banco de dados;Copie o texto que contém a função (publicado em um post acima) para a área onde você digita seus sqlsSubstitua o texto BancoDeDados pelo nome de seu banco de dados nas linhas:DROP FUNCTION IF EXISTS `BancoDeDados`.`ValorApagar`$$CREATE FUNCTION ` BancoDeDados `.`ValorApagar` (Campo Timestamp)Execute o código,Pronto. sua função está no banco. Link para o comentário Compartilhar em outros sites More sharing options...
0 shelter Postado Junho 14, 2008 Autor Denunciar Share Postado Junho 14, 2008 Boa amigo Denis,Aqui não vou desistir, sei que não é a sua função mais pow me ajuda que vou me esforça para aprender , só preciso entender aqui:Estou executando o código conforme me passou e estou recebendo o seguinte erro: Script line: 4 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEGIN declare Tempo Time; declare Seg integer; declare Valor doubl' at line 2.Não sei nem por onde começar , aqui me a uma ajuda para que eu me esforce para entender.Segue o código e em vermelho coloco a duvida:DELIMITER $$DROP FUNCTION IF EXISTS `shelter`.`ValorApagar` $$Aqui shelter seria o banco certo? Teste o nome da função ok?CREATE FUNCTION `shelter`.`ValorApagar` (Campo Timestamp)Aqui seria o pior (Campo Timestamp) , qual a minha duvida, escreve desta forma CAMPO TIMESTAMP porque? Onde declaro a tabela ... o nome do campo fiquei em perdido aqui , este aqui é o pior para mim.BEGIN declare Tempo Time; declare Seg integer; declare Valor double; Set Tempo = Time(campo); Set Seg = Hour(Tempo) * 3600; Set Seg = Seg + (Minute(Tempo) * 60); Set Seg = Seg + Second(Tempo) If Seg < = 30 then Set Valor = 0.50; Else Set Seg = Seg - 30; Set Valor = 0.50 + (0.10 * (Seg Div 6)); If (Seg Mod 6) <> 0 then Set Valor = Valor + 0.10; End if; End if; ValorApagar = Valor;END$$DELIMITER ;Você poderia comentar estes por favor e me ajudar neste erro .Te agradeço muito, muito obrigado.Abraços Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Junho 16, 2008 Denunciar Share Postado Junho 16, 2008 Oi,'shelter'!Vamos comentar ponto a ponto toda a função. Para tal vou usar os caracteres /* para iniciar o comantário e os caracteres */ para finalizar o comantário:DELIMITER $$; /*troca o delimitador (caractere que informa quando o comando acabou). Neste caso dentro da função vou usar o caracter ponto-e-virgula e fora da função vou usar os caracteres $$ para indicar que o comando acabou */ DROP FUNCTION IF EXISTS `BancoDeDados`.`ValorApagar`$$ /* Verifica se a função já existe e se já existir deleta ela. O termo BancoDeDados deve ser substituido pelo nome de seu banco de dados e o termo ValorApagar é o nome da função propriamente dito */ CREATE FUNCTION ` BancoDeDados `.`ValorApagar` (Campo Timestamp) NO SQL RETURN double /* Favor retirar o ponto-e-virgula que estava aqui. Foi um erro meu. */ /* O comando acima cria a função ValorApagar no banco de dados indicado pelo nome BancoDeDados. Recebe como parâmetro uma variável, aqui denominada "Campo" que é do tipo Timestamp. A cláusula "NO SQL" Informa ao MySql que a função não executará internamente nenhum código SQL. A cláusula "RETURN double" informa so MySQL que a função retornará um valor do tipo double */ BEGIN /* Aqui se inicia a função */ /*declare Tempo Time;*/ /* Declara uma variável de nome "Tempo" do tipo time */ /* A declaração acima estava provocando um erro insperado. Então retirei a variável da função, mas deixei comentada a declaração paraque sirva de instrução */ declare Seg integer; declare Valor double; /*Set Tempo = Time(campo); *//* Atribui a variavel "Tempo" o valor de retorno da função Time sobre o parâmetro "Campo" */ Set Seg = Hour(campo) * 3600; Set Seg = Seg + (Minute(campo) * 60); Set Seg = Seg + Second(campo) If Seg < = 30 then Set Valor = 0.50; Else Set Seg = Seg - 30; Set Valor = 0.50 + (0.10 * (Seg Div 6)); If (Seg Mod 6) <> 0 then Set Valor = Valor + 0.10; End if; End if; ValorApagar = Valor; /* Informa ao MySQL que afunção está retornando o valor esperado */ END$$ /* Fim da Função */ DELIMITER;$$ /* Troca novamente o delimitador informando ao MySQL que ele volta a utilizar o ponto-e-virgula como finalizador de instrução */No código acima estamos executando 4 comandos distintos de uma única vez. São eles:o DELIMITER $$;o DROP FUNCTION ...o CREATE FUNCTION ... eo DELIMITER;$$ novamente. Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
shelter
Boa galera, e aí na boa?
Preciso muito da colaboração dos amigos.
Aqui tenho uma tabela com os seguintes campos.
Ramal ( DECIMAL ).
N_discado ( DECIMAL ).
Tronco ( DECIMAL ).
Duracao ( TIMESTAMP ).
Ramal N_discado Tronco Duracao
201 25165660 10 2005-06-05 00:00:22
Qual a pior missão que tenho hoje?
Preciso que as primeiros 00:00:30 segundos tenho o valor de R$ 0,50 e que a cada 6 segundos ele some R$ 0,10.
Vou dar um exemplo:
Uma ligação com duração de 00:00:22 igual a R$ 0,50.
Uma ligação com duração de 00:00:30 igual a R$ 0,50.
Uma ligação com duração de 00:00:42 igual a R$ 0,70.
Solicito a ajuda dos amigos, pois não estou sabendo nem como começar.
Vlw galera.
Abraços
Link para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados