[firebase-br] RES: RES: RES: Ajuda com Procedure

Cássio cassio.hc em gmail.com
Seg Jul 6 11:37:05 -03 2009


2.1
Estranho mesmo.. o local do suspend faz diferença?
tentei colocar um commit mas o fb não aceitou.

:S

vlw.

Ivan Guimarães Meirelles escreveu:
> Realmente esqueci do SUSPEND.
> Mas é estranho não excluir...
> 
> Qual a versão do firebird ??
> 
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
> nome de Cássio
> Enviada em: segunda-feira, 6 de julho de 2009 10:24
> Para: lista em firebase.com.br
> Assunto: Re: [firebase-br] RES: RES: Ajuda com Procedure
> 
> oi. na verdade já estou fazendo bem parecido. vi que vc não colocou o 
> suspend;, neste teu caso não irá funcionar certo?
> 
> to fazendo assim, a lógica está certa, entra onde tem que entrar. o que 
> ta pegando é que o delete não é executado se a SP for chamada por select.
> 
> to fazendo assim:
> BEGIN
>    MENSAGEM='';
>     SELECT COUNT(1) as EXISTE FROM LOCACOES LOC
>     WHERE ID_LOCACAO IN (SELECT ID_ORIGEM
>                          FROM   LANCAMENTOS
>                          WHERE  ID_ORIGEM = LOC.ID_lOCACAO)
>                                 AND LOC.ID_LOCACAO =:ID_LOCACAO
>                         INTO :EXISTE;
> 
>     IF (:EXISTE =0 ) THEN
>       BEGIN
>            DELETE FROM LOCACOES WHERE LOCACOES.ID_LOCACAO =:ID_LOCACAO; 
> --AQUI NÃO EXECUTA SE CHAMADO POR SELECT
>            MENSAGEM='S';
>       END
>     ELSE
>            MENSAGEM='N';
>       Suspend;
> 
> END
> 
> ai chamo assim:
> select * from sp_minha(3) -- aqui entra no existe=0
> retorna o 'S'
> mas o registro continua lá..
> 
> se eu faço com execute procedure, funciona! porém não retorna pra mim 
> saber se executou ou não.
> 
> []s
> 
> 
> Ivan Guimarães Meirelles escreveu:
>> Olá Cássio... 
>>
>> Tente assim:
>>
>> RECREATE PROCEDURE PR_EXCLUIR_LOC (ID_LOCACAO BIGINT)
>> RETURNS (RESPOSTA CHAR(1))
>> AS
>> DECLARE VARIABLE EXISTE INTEGER;
>> BEGIN
>> 	SELECT COUNT(1) FROM LOCACOES LOC
>> 	WHERE ID_LOCACAO IN (SELECT ID_ORIGEM
>>                      FROM LANCAMENTOS LAN
>>                      WHERE LAN.ID_ORIGEM = LOC.ID_lOCACAO)
>>                      AND LOC.ID_LOCACAO = :ID_LOCACAO INTO :EXISTE;
>> 	IF (:EXISTE = 0) THEN
>> 		BEGIN
>> 			DELETE FROM LOCACOES WHERE LOCACOES.ID_LOCACAO
>> =:ID_LOCACAO;
>> 			RESPOSTA = 'S';
>> 		END
>> 	ELSE 
>> 		RESPOSTA = 'N';
>> END
>>
>> Ai quando vc executar essa SP... como ela tem um retorno, vc terá quer
> fazer
>> assim:
>>
>> Select resposta from PR_ercluir_loc(3)...isso retornará um único registro
>> com o campo reposta trazendo 'S' ou 'N' se foi excluído ou não.
>>
>> Espero ter ajudado... 
>> Um abraço.
>>
>> -----Mensagem original-----
>> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
> Em
>> nome de Cássio
>> Enviada em: segunda-feira, 6 de julho de 2009 09:11
>> Para: lista em firebase.com.br
>> Assunto: Re: [firebase-br] RES: Ajuda com Procedure
>>
>> Estou tentando executar minha SP conforme já falamos abaixo.
>> Se eu a chamo pelo Execute Procedure nomesp(codigo); executa o delete se 
>> retornar.
>>
>> quando faço com select para obter o retorno, ele retorna o que deve 
>> retornar porem não executa o delete.
>>
>> select * from pr_minha(3); -- assim só retorna a msg mas não executa o 
>> comando delete.
>>
>> o que está faltando?
>>
>>
>>
>> Magno System escreveu:
>>> Não está dando certo porque quando não existe retorna NULL e não zero.
>>>
>>> Tente assim:
>>>
>>> SELECT COALESCE(LOC.ID_LOCACAO, 0) FROM LOCACOES LOC
>>>   WHERE ID_LOCACAO IN (SELECT ID_ORIGEM
>>>                        FROM   LANCAMENTOS
>>>                        WHERE  ID_ORIGEM=LOC.ID_lOCACAO)
>>>                               AND LOC.ID_LOCACAO =:ID_LOCACAO INTO
>> :EXISTE;
>>> ----- Original Message ----- From: "Ivan Guimarães Meirelles" 
>>> <igmeirelles em gmail.com>
>>> To: "'FireBase'" <lista em firebase.com.br>
>>> Sent: Saturday, July 04, 2009 6:56 PM
>>> Subject: [firebase-br] RES: Ajuda com Procedure
>>>
>>>
>>> Olá Cássio...
>>> Não seria interessante usar FOREIGN KEY para controlar isso ??
>>>
>>> Um abraço...
>>>
>>> -----Mensagem original-----
>>> De: lista-bounces em firebase.com.br 
>>> [mailto:lista-bounces em firebase.com.br] Em
>>> nome de Cássio
>>> Enviada em: sábado, 4 de julho de 2009 10:26
>>> Para: lista em firebase.com.br
>>> Assunto: [firebase-br] Ajuda com Procedure
>>>
>>> Opa.
>>> Quero fazer uma pr que exclua um registro de uma tabela caso não exista
>>> este registro não esteja em outra. fiz assim, mas sem sucesso.
>>>
>>>
>>> SET TERM ^ ;
>>>
>>> RECREATE PROCEDURE PR_EXCLUIR_LOC (
>>>  ID_LOCACAO BIGINT)
>>> AS
>>> DECLARE VARIABLE EXISTE INTEGER;
>>>
>>> BEGIN
>>>   --verifico se há locação em lançamentos e adicionado o resutado no
>>> inteiro existe.
>>>   SELECT LOC.ID_LOCACAO FROM LOCACOES LOC
>>>   WHERE ID_LOCACAO IN (SELECT ID_ORIGEM
>>>                        FROM   LANCAMENTOS
>>>                        WHERE  ID_ORIGEM=LOC.ID_lOCACAO)
>>>                               AND LOC.ID_LOCACAO =:ID_LOCACAO INTO
>> :EXISTE;
>>>    IF (:EXISTE = 0) THEN --caso não exista então apaga a locação...
>>>      BEGIN
>>>           DELETE FROM LOCACOES WHERE LOCACOES.ID_LOCACAO =:ID_LOCACAO;
>>>     END
>>> END^
>>>
>>> SET TERM ; ^
>>>
>>> chamo por fora assim:
>>> execute procedure pr_excluir_loc(5);
>>>
>>> retorna "The command(s) completed successfully."
>>> mas o registro da locação continua la.
>>>
>>>
>>> obrigado!
>>>
>>>
>>> ______________________________________________
>>> 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
>>>
>>>
>>> ______________________________________________
>>> 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
>>>
>>> ______________________________________________
>>> 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
>>>
>>
>> ______________________________________________
>> 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
>>
>>
>> ______________________________________________
>> 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
>>
> 
> 
> ______________________________________________
> 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
> 
> 
> ______________________________________________
> 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