- Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 16 anos, 7 meses atrás por
David Siqueira.
-
AutorPosts
-
5 de agosto de 2009 às 3:42 pm #88562
facc
ParticipanteBom dia,
Tenho uma tabela onde possui alguns registros aleatórios que são vendidos a clientes, que dá direito a um sorteio no próximo mês.
Acontece que alguns números não são vendidos, então preciso pegar o próximo número vendido.Ex.
o número sorteado foi 123456, porém ele não foi vendido então tenho que somar 1 número (123456 + 1 = 123457) e verificar se foi vendido ou não, caso também não for vendido, fazer a mesma coisa até encontrar algum ganhador.
Alguém pode me dar uma idéia de como fazer isso?
5 de agosto de 2009 às 4:17 pm #88563Regis Araujo
ParticipanteOla amigo.. bom dia…
Vc tem como postar a estrutura da sua tabela.. e com alguns exemplos de conteudo..
Mas já adiantando.. o que vc pode fazer.. é utilizar um while loop.. ou um for..
Ex:
while valor "sorteado" loop
valor := campo+1;end loop;
Abraços…
5 de agosto de 2009 às 4:49 pm #88566facc
ParticipanteEstrutura da Tabela
NrSorte nVarchar2(5) - Número a ser sorteado
Loja nVarchar2(3) - Loja que vendeu
Mes_ano Date - Validade do curso
CodCliente Number - Código do Cliente
CPF nVarchar2(14) - CPF do comprador
NomCli nVarchar2(41) - Nome do comprador
TelCli nVarchar2(10) - Telefone
DataNrSorte Date - Data da venda
PDV_Caixa nVarchar2(10) - Caixa que vendeu
CodProdSort nVarchar2(30) - Reservado
SerieSorteio nVarchar2(3) - Serie do Sorteio
NumOperador Number - Matricula do operador Caixa
VlrTransacao Number(15,2) - Valor
FlgUso Number - 0 - Não vendido / 1 - Vendido
5 de agosto de 2009 às 5:04 pm #88567Marcio68Almeida
ParticipanteVocê pode utilizar o seguinte artifício…
Select MIN (numero)
From tabela
Where numero <= sorteado
Traduzindo…
Vai pegar o menor número maior ou igual ao número sorteado, se existir o sorteado é ele, caso contrário o próximo da lista…5 de agosto de 2009 às 5:28 pm #88570Regis Araujo
ParticipanteOla amigo…
Bom.. fiz um teste aqui e funcionou.. crie uma function mais ou menos assim… ai vc ajusta para a sua necessidade…..
CREATE OR REPLACE FUNCTION TESTE2 ( NRSORTE NUMBER) RETURN NUMBER IS
pFlgUso NUMBER :=0;
pNrSorte NUMBER :=0;BEGIN
WHILE (pFlgUso 1) LOOP
SELECT FlgUso , NrSorte
INTO pFlgUso, pNrSorte
FROM TESTE
WHERE NrSorte = pNrSorte+1;END LOOP;
RETURN(pNrSorte);END TESTE2;
Abraços…!!!
5 de agosto de 2009 às 6:21 pm #88573David Siqueira
ParticipanteNão sou developer mais acredito que a opção passada pelo Regis seja extremamente relevante.
Atente apenas para a performance do processo como um todo ao adicionar o uso da function.
P.S.: Parabéns Régis, sempre agregando muito com o pessoal.
Abraço.
5 de agosto de 2009 às 7:03 pm #88576Regis Araujo
ParticipanteOpa.. Valeu David…
É como conversamos outro dia.. Não custa nada compartilhar o que aprendemos…
Da mesma maneira que o pessoal e você tem me ajudado quando preciso.. Procuro ajudar a quem eu puder com o que aprendi.. Alem de que eu tbm aprendo mais assim.. hehehe..!!Então FACC.. é como o David falou.. esta function retorna a informação que vc precisa.. mas verifica a performance, pois imagina se vc precisar ficar executando esta function a cada 1 segundo.. o que vc pode tbm fazer é jogar a ideia do WHILE dentro da sua procedure/function.. pois vc não irá precisar acionar uma fuction externa…
Abraços..!!
6 de agosto de 2009 às 10:46 pm #88679facc
ParticipanteFiz dessa forma, nos meus testes funcionou legal.
SELECT NROSORTE, SERIESORTEIO, LOJA, CODCLIENTE,
TO_CHAR(DATANRSORTE, 'DD/MM/YYYY') ,
CPF,
NOMCLI,
TELCLI
FROM CYBELAR_NROSORTE"
WHERE NROSORTE IN (SELECT MIN(NROSORTE)
FROM CYBELAR_NROSORTE
WHERE NROSORTE >= :Numero
AND FLGUSO = 1
AND EXTRACT(MONTH FROM MES_ANO) = :Mes
AND EXTRACT(YEAR FROM MES_ANO) = :Ano
GROUP BY MES_ANO)
AND EXTRACT(MONTH FROM MES_ANO) = :Mes
AND EXTRACT(YEAR FROM MES_ANO) = :Ano
AND FLGUSO = 16 de agosto de 2009 às 10:52 pm #88681David Siqueira
ParticipanteBoa Facc, mais só fique esperto com relação a esses tratamentos com campos do tipo data, sempre dão dor de cabeça quando recebem muito tratamento por parte de formatações, e de repente vc pode até notar uma queda na performance, fique atento, é apenas uma dica.
Abração…e Parabéns!!!
-
AutorPosts
- Você deve fazer login para responder a este tópico.