[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