[firebase-br] Dúvida sobre Select
Carlos Andrade
krlosgilson em gmail.com
Sex Ago 8 20:23:16 -03 2008
> Então galera, estou tentando executar esta procedure de dentro da minha
> aplicação, mas também de dentro do Firebird está gerando esta exception.
> Estou precisando o contador não conte a quantidade de aulas que existe na
> tabela e sim se existe aulas de 20 alunos do veículo que irei informar e o
> intevalo de datas.
tipo assim:
ID_ALUNO ID_VEICULO DATA
4 1 08-01-2008
4 1 08-02-2008
4 1 08-03-2008
7 1 08-01-2008
7 1 08-02-2008
8 1 08-03-2008
8 1 08-03-2008
Então, no resultado acima está me mostrando a quantidade total de aulas que
foi marcada para o veículo tal no período tal. Só que não é disso que estou
precisando, e sim que a procedure agrupe e retorne apenas 3. Por que nesse
resultado ai só foram marcadas as aulas para 3 alunos. É que o sistema do
Detran precisa bloquear aulas para o mesmo veículo quando esse mesmo veículo
completar aulas de 20 alunos no mês, sendo que não interessa a quantidade de
aulas. Acho que agora deu para entender melhor.... Obrigado pela
disponibilidade de todos!
(Samuel Ferreira) escreveu:
ola
olha, nao tem como dar 'multiple rows' no count.
como vc ta chamando a procedure?
(Felipe Oriani) escreveu:
Olá Carlos, tente executar esta sql diretamente no FireBird ou no SQL Editor
do IBExpert (caso vc o utilize)...
Não sei se é interessante, mas neste caso, acho que você poderia executar
diretamente no software este tipo de sql..
(Carlos Andrade) escreveu:
Boa Noite! Tenho uma tabela que armazena as aulas práticas dos alunos de um
sistema para Auto-Escolas. Estou precisando dar um select que me retorne 1
(para true) ou 0 (para false) se já foram marcadas as aulas de 20 alunos
diferentes em um determinado período de datas. Tentei as seguintes
procedures:
CREATE PROCEDURE SP_LIMITE_AULAS_VEIC(
VEICULO INTEGER,
DATA_INI DATE,
DATA_FIM DATE)
RETURNS (
YES_NO SMALLINT)
AS
declare variable qtde integer;
begin
/* Verifica se já foram marcadas as 20 aulas do veículo no mês */
select count(*) from AULAS_PRATICAS
where ID_VEICULO =:veiculo and DATA BETWEEN :data_ini and :data_fim
into : qtde;
if (qtde > 19) then yes_no = 1; else yes_no = 0;
suspend;
end
( NESSE EXEMPLO ACIMA ESTÁ ME RETORNANDO VÁRIAS LINHAS GERANDO UM
EXCEPTION, MULTIPLE ROWS..... )
CREATE PROCEDURE SP_LIMITE_AULAS_VEIC(
VEICULO INTEGER,
DATA_INI DATE,
DATA_FIM DATE)
RETURNS (
YES_NO SMALLINT)
AS
declare variable qtde integer;
begin
/* Verifica se já foram marcadas as 20 aulas do veículo no mês */
select count(*) from AULAS_PRATICAS
where ID_VEICULO =:veiculo and DATA BETWEEN :data_ini and :data_fim
group by ID_ALUNO
into : qtde;
if (qtde > 19) then yes_no = 1; else yes_no = 0;
suspend;
end
( NESSE EXEMPLO ACIMA NÃO GERA NENHUMA EXCEPTION, MAS ESTÁ MOSTRANDO O
RESULTADO NÃO ESPERADO, POIS O RESULTADO ESTÁ MOSTRANDO A QUANTIDADE DE
AULAS DE TODOS OS ALUNOS.
Então, o que estou querendo é a quantidade de alunos no período informado
que foram marcados no veículo especificado.
Acho que deu para entender!!!
Mais detalhes sobre a lista de discussão lista