[firebase-br] Stored Procedure de consulta com sql dinâmico

Jader Ricardo jader em caramuru.com
Sex Jul 8 15:18:02 -03 2005


Boa tarde a todos !

Após vários post's insistentes solicitando ajuda já não precisarei mais de
ajuda para montar minha procedure, gostaria de compartilhar com vc's a
solução que encontrei para montar e executar o sql, sei que é simples mas
caso alguém precise .... Lá vai ..... Hah ... Antes tenho uma dúvida, pra
que serve os ":" antes das variáveis que criamos ? Exemplo (:cont, cont).

Valeu
Jader Ricardo 

**********
SET TERM ^ ;

CREATE PROCEDURE SP_CONSULTA_TESTE_3 (
    PECODIGO INTEGER,
    PENOME VARCHAR(50),
    PECIDADE VARCHAR(30))
RETURNS (
    PSCODIGO INTEGER,
    PSNOME VARCHAR(50),
    PSCIDADE VARCHAR(30))
AS
DECLARE VARIABLE STRSQL VARCHAR(1000);
DECLARE VARIABLE CONT INTEGER;
BEGIN

  /* INICIANDO AS VARIÁVEIS */
  STRSQL = 'SELECT CODIGO, NOME, CIDADE FROM CLIENTES WHERE';
  CONT   = 0;

  /* TESTANDO TODOS OS CAMPOS */
  IF ((:PECODIGO IS NULL) AND (:PENOME IS NULL) AND (:PECIDADE IS NULL))
THEN
    BEGIN
      STRSQL = 'SELECT * FROM CLIENTES';
    END

  /* TESTANDO O PRIMEIRO CAMPO */
  IF (:PECODIGO IS NOT NULL) THEN
    BEGIN
      STRSQL = STRSQL || ' CODIGO = ''' || CAST(PECODIGO AS CHAR(10)) ||
'''';
      CONT   = 1;
    END

  /* TESTANDO O SEGUNDO CAMPO */
  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 CAMPO */
  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 || '''';
          CONT = 1;
        END
    END

  FOR EXECUTE STATEMENT STRSQL
  INTO PSCODIGO,PSNOME,PSCIDADE
  DO
  BEGIN
    SUSPEND;
  END
END
^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE SP_CONSULTA_TESTE_3 TO SYSDBA;

*************
Jader Ricardo





Mais detalhes sobre a lista de discussão lista