[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