[firebase-br] Procedure - Parametro - DEPENDENDO modificar a Instrução SQL

Sandro Souza escovadordebits em gmail.com
Ter Out 23 21:06:41 -03 2012


Bom dia/tarde/noite Adilson.

Meu nobre, acredito que o que está faltando seja apenas o parâmetro de
saída.

Você declarou o parâmetro de entrada, mas não declarou o parâmetro de
saída, então o SUSPEND fica sem o que fazer.

Por favor, teste o seguinte código:

*SET TERM ^ ;
CREATE OR ALTER PROCEDURE PROCEDURE_TESTE(
  PAR_CODCID VARCHAR(4)
)RETURNS(
  DESCRICAO VARCHAR(30) -- Não sei o tamanho da sua descrição. Ajuste-a.
)AS
BEGIN
  IF (PAR_CODCID IS NULL) THEN
    FOR SELECT DESCRICAO
        FROM TRACID
        INTO :DESCRICAO DO
      SUSPEND;
  ELSE
    FOR SELECT DESCRICAO
        FROM TRACID
        WHERE CODCID = :PAR_CODCID
        INTO :DESCRICAO DO
      SUSPEND;
END^
SET TERM ; ^*

E agora o teste:
*
SELECT * FROM PROCEDURE_TESTE(NULL);*

e

*SELECT * FROM PROCEDURE_TESTE(algum-código-válido);*

Poderia otimizar o código dessa stored procedure da seguinte forma:

*SET TERM ^ ;
CREATE OR ALTER PROCEDURE PROCEDURE_TESTE(
  PAR_CODCID VARCHAR(4)
)RETURNS(
  DESCRICAO VARCHAR(30) -- Não sei o tamanho da sua descrição. Ajuste-a.
)AS
BEGIN
  FOR SELECT DESCRICAO
      FROM TRACID
      WHERE (:PAR_CODCID IS NULL) OR ((:PAR_CODCID IS NOT NULL)AND(CODCID =
:PAR_CODCID))
      INTO :DESCRICAO DO
    SUSPEND;
END^
SET TERM ; ^*

Espero ter ajudado mais que atrapalhado. :D

Em 23 de outubro de 2012 16:40, Adilson Pazzini <adilson em storesystems.com.br
> escreveu:

> Só consegui fazendo dessa forma ...
> Alguem tem alguma forma mais simples de se fazer , mais que eu tenha o
> mesmo resultado ...
>
> Ate . so pra entender . o que eu quero . é o seguinte . queria que a
> procedure . conforme eu informa-se ou nao um parametro . ele
> faria a pesquisa de uma forma ou outra. mais queria algo mais simples .
> pois ate ai . é uma pesquisa de uma linha . as vezes tem
> selects q são gigantescas . e ficaria um codigo muito grande ....
>
>
>
>
>  IF (PAR_CODCID IS NULL) THEN
>    BEGIN
>
>     FOR
>       SELECT DESCRICAO FROM TRACID
>       INTO :DESCRICAO ;
>     DO
>      suspend;
>
>    END
>  ELSE
>   BEGIN
>
>
>     FOR
>       SELECT DESCRICAO FROM TRACID WHERE CODCID = :PAR_CODCID
>       INTO :DESCRICAO ;
>     DO
>      suspend;
>
>   END
>
>
>
>
> Tentei assim. mais nao dá certo
>
> SET TERM ^ ;
>
> CREATE OR ALTER PROCEDURE PROCEDURE_TESTE (
>     par_codcid varchar(4))
> as
> begin
>   /* Procedure Text */
>   FOR
>
>   SELECT DESCRICAO FROM TRACID
>
>   IF (PAR_CODCID IS NULL) THEN /*EX. TO MISTURANDO O SCRIP NO MEIO DO SQL
>  */
>    WHERE CODCID = :PAR_CODCID
>    /* QUERIA INCLUIR AQUI UMA COMPLEMENTACAO PARA FORMAÇAO DO SQL*/
>
>    INTO :DESCRICAO ;
>
>   suspend;
> end^
>
> SET TERM ; ^
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista