- Este tópico contém 20 respostas, 4 vozes e foi atualizado pela última vez 16 anos, 3 meses atrás por
Girino.
-
AutorPosts
-
25 de novembro de 2009 às 9:01 pm #91143
fsitja
ParticipantePostei acima como retornar os valores, se você quiser combinar com o que você já produziu até agora.
Tendo dúvidas mais específicas, após ter tentado modificar o código, sinta-se a vontade para perguntar.
25 de novembro de 2009 às 9:32 pm #91144Girino
ParticipanteOlá..!! 8)
Desculpe pela amolação e tudo mais.. 😳
Como adaptar o código abaixo:
CREATE PROCEDURE TESTE
@PAR1 VARCHAR(4)
AS
SELECT *FROM TABELA
WHERE CODIGO = @PAR1Por este:
CREATE OR REPLACE PROCEDURE
test_ref(cur_output OUT sys_refcursor) IS
BEGIN
OPEN cur_output FOR
WITH teste AS
(SELECT 1 num FROM dual)
SELECT num
FROM teste;
END;Muito Obrigado mesmo..!! 😀
25 de novembro de 2009 às 10:01 pm #91145burga
ParticipanteOi Girino,
Adapte o código do Mauro depois de feita a correção que eu passei, com o segundo exemplo do fsitja. Criando um pacote e uma função com retorno PIPELINED, tipo de saída sendo do tipo ROWTYPE da sua tabela e substituindo a linha do código do Mauro (abaixo)
DBMS_OUTPUT.PUT_LINE(v_codigo);pela linha do exemplo do fsitja (a seguir)
PIPE ROW(v_saida(i));Sendo que a variavel v_saida é a que eu citei anteriormente como “ROWTYPE da sua tabela”. De resto você junta os dois códigos que os colegas passaram. 🙂
EDIT:
Ficou meio confusa a explicação… Se ninguém postar antes, depois eu posto pra você com mais detalhes!26 de novembro de 2009 às 12:00 am #91156Girino
ParticipanteOlá Burga..!! 8)
Tudo Bem? 😉Se você puder fazer essa gentileza eu agradeceria muito..!! 😆
um abraço..!! 🙂
Renato 8)
26 de novembro de 2009 às 5:17 am #91161burga
ParticipanteOi Renato,
Segue o código tomando como base o código do fsitja:
CREATE OR REPLACE PACKAGE pk_type AS
TYPE t_tab IS TABLE OF apontamento%rowtype;
END pk_type;
/
CREATE OR REPLACE FUNCTION sp_test(p_parametro IN VARCHAR2) return pk_type.t_tab
PIPELINED IS
v_saida pk_type.t_tab;
v_refcur SYS_REFCURSOR;
BEGIN
OPEN v_refcur FOR
select * from APONTAMENTO where CODCC_R = p_parametro;
FETCH v_refcur BULK COLLECT
INTO v_saida;
close v_refcur;
for i in 1 .. v_saida.count
loop
PIPE ROW(v_saida(i));
end loop;
END sp_test;
/E para ver o conteúdo buscado:
select * from table(sp_test(INFORME_O_CODIGO));OBS: substitua a string INFORME_O_CODIGO pelo código buscado por você.
A compreensão do código fica por sua conta. Para aprender mais sobre a programação em PL/SQL você pode fazer download de alguns tutoriais aqui:
https://profissionaloracle.com.br/modules.php?name=Downloads&cid=41
Note ainda que talvez, pro seu caso, a abordagem adotada aqui pode não ser a melhor opção (retorno linha a linha), por isto insisto em dizer que tente compreender o que foi feito e fazer uma pesquisa sobre outras formas de se conseguir o que você quer, podendo começar buscando pelas outras maneiras citadas pelo nosso amigo Francisco (fsitja). 😉
26 de novembro de 2009 às 8:51 pm #91177Girino
ParticipanteOlá..!! 8)
Uma ótima Tarde à Todos..!! 😀
Funcionou Belezinha “Burga” 😀
Gostaria de agradecer à todos que contribuiram para a resolução do meu tópico.
Muito Obrigado mesmo e espero que essa dúvida seja útil para outros membros que acessarem o fórum..!! 😉
abraços..!!
Renato 8)
-
AutorPosts
- Você deve fazer login para responder a este tópico.