[firebase-br] [Stored Procedure] - Sql dinâmico - Erro de sintaxe

Jader Ricardo jader em caramuru.com
Qui Jul 7 17:22:58 -03 2005


Boa tarde amigos !

Gostaria de começar a trabalhar com consultas a qualquer atributo de minhas
tabelas, exemplo:

Tabela clientes

Nome         Cpf                   Ident               Cidade
Joao          11111111111       2222222222       São Paulo
Jose           00000000000      3333333333       Rio de Janeiro
Maria         99999999999       4444444444       Brasília
Miguel        22222222222      1111111111        Itumbiara
Jose          55555555555       0000000000        Itumbiara

Então eu queria montar uma stored procedure selecionável onde de acordo com
o parâmetro que eu passasse ele me retornava as informações
Exemplo:

Parametros a serem passados (Nome varchar (50), Cpf varchar(12), Ident
varcahr (15), Cidade varchar(30))

Como faria para que me retorne todos os clientes que moram em Itumbiara e se
chama Jose ?
('Jose',Null,Null,'Itumbiara') ????

2 - Como faria para que me retorne todos os clientes de Itumbiara ?
(Null,Null,Null,'Itumbiara') ????

A ideia era fazer um select passando os valores mas se o valor passado nos
parâmetros for null ele não traz nada ...
Caso alguém tenha uma idéia ou exemplo fico grato.

Ainda não consegui fazer esta procedure funcionar, desde segunda feira,
aparece este erro "Column Unknown Jose" ao tentar passar (Jose) apenas o
parametro :PENOME, isso no ambiente do Ibexpert, alguém poderia me ajudar ?

BEGIN
  /* Iniciando variáveis */
  STRSQL = 'SELECT CODIGO, NOME, CIDADE FROM CLIENTES WHERE ';
  CONT = 0;

  /* Testando o primeiro atributo */
  IF (:PECODIGO IS NOT NULL) THEN
    BEGIN
      STRSQL = STRSQL ||'CODIGO = ' || :PECODIGO;
      CONT = 1;
    END

  /* Testando o segundo atributo
     O número um serve para indicar ser vou ter que usar um AND */
  IF ((:CONT = 1) AND (:PENOME IS NOT NULL)) THEN
    BEGIN
      STRSQL = STRSQL || 'AND NOME = ' || :PENOME;
      CONT = 1;
    END
  ELSE
    BEGIN
      IF (:PENOME IS NOT NULL) THEN
        BEGIN
          STRSQL = STRSQL || 'NOME = ' || :PENOME;
          CONT = 1;
        END
    END

  /* Testando o terceiro atributo
   O número um serve para indicar ser vou ter que usar um AND */
  IF ((:CONT = 1) AND (:PECIDADE IS NOT NULL)) THEN
    BEGIN
      STRSQL = STRSQL || 'AND CIDADE = ' || :PECIDADE;
      CONT = 1;
    END
  ELSE
    BEGIN
      IF (:PECIDADE IS NOT NULL) THEN
        BEGIN
          STRSQL = STRSQL || 'CIDADE = ' || :PECIDADE;
        END
    END

  /* Executar o select */
  FOR EXECUTE STATEMENT :STRSQL            =====>>>> O erro aparece aqui
  INTO :PSCODIGO, :PSNOME, :PSCIDADE
  DO
  BEGIN
    SUSPEND;
  END
END


Obs: Se alguém souber de algum material de como "debugar" procedures no
Ibexpert poderia me passar que tento me virar ...

Desde já agradeço toda a ajuda ...
____________
Jader Ricardo




______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br Para editar
sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista