[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