- Este tópico contém 7 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 11 meses atrás por
secco.
-
AutorPosts
-
1 de abril de 2009 às 5:10 pm #86031
secco
ParticipanteBom dia pessoal…
Já fiz dversas stored procedures em firebird e um recurso muito bom e prático que tem lá é o SUSPEND, o qual eu uso dentro de um FOR SELECT para ter uma lista como resultado.Gostaria de saber se existe o mesmo comando (ou equivalente) em Oracle e como funciona.
Se alguém tiver um trecho de código que faz o que citei acima seria de grande valia.Grato desde já.
Abraços.1 de abril de 2009 às 5:31 pm #86032Ishii
ParticipanteOlá,
O que tem no Oracle que poderia ser utilizando em vez do Suspend é uma função, pois ela pode ser usada em select também e retorna valores linha a linha….
[]s Ishii
1 de abril de 2009 às 6:40 pm #86034secco
ParticipanteCREATE OR ALTER PROCEDURE CODIGO_GRUPOS (cod_filial_in integer)
returns (codgrupo integer)
as
begin
FOR SELECT COD_GRUPO
FROM TB_GRUPO
WHERE COD_FILIAL = cod_filial_in
INTO :CODGRUPO DO
SUSPEND;
endEsta é uma procedure de exemplo em firebird, onde o cara passa uma filial e recebe todos os grupos daquela filial como resultado (o suspend faz isso), porque tem uma variavel de retorno nomeada “codgrupo integer”.
No Oracle não consegui nomear esta variavel de retorno para fazer o mesmo.
Consegue converter este código para oracle? Tem jeito?Abraço
1 de abril de 2009 às 6:52 pm #86035Ishii
ParticipanteOlá,
Seria mais ou menos assim:
CREATE OR REPLACE function CODIGO_GRUPOS (cod_filial_in integer)returns integer is
codgrupo tb_grupo.cod_grupo%type;
begin
SELECT COD_GRUPO
into CODGRUPO
FROM TB_GRUPOWHERE COD_FILIAL = cod_filial_in;
return codgrupo;
end;
Para executar a função pode usar um select…
select CODIGO_GRUPOS(cod_filial) from tb_filial;
[]s Ishii
2 de abril de 2009 às 4:26 pm #86043secco
ParticipanteAah entendi oque vc quis fazer ai sim…
Mas vc entende tb que o que vc me explicou é o contrário do q eu pedi né?
No seu caso, a procedure retorna somente um valor, ao contrário do que é feito com o SUSPEND.2 de abril de 2009 às 5:04 pm #86044Marcio68Almeida
Participante[quote=”secco”:hnhx0qlu]Aah entendi oque vc quis fazer ai sim…
Mas vc entende tb que o que vc me explicou é o contrário do q eu pedi né?
No seu caso, a procedure retorna somente um valor, ao contrário do que é feito com o SUSPEND.[/quote]Na verdade o que você procura é a solução proposta OU um cursor que fará um loop trazendo as linhas desejadas.
2 de abril de 2009 às 5:25 pm #86045secco
ParticipanteEu até achei algo que faz +- isto.
Mas olha o tamanho da jaca:
http://it.toolbox.com/blogs/database-so … racle-7802
Ai fica complicado também. Poxa no FB eh tão simples, não sei como no Oracle também não é assim.
😥2 de abril de 2009 às 5:26 pm #86046secco
ParticipanteÉ que fazer um código desse tamanho só por causa de um retorno fica complicado.
-
AutorPosts
- Você deve fazer login para responder a este tópico.