[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