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

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


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
> 





Mais detalhes sobre a lista de discussão lista