Pular para o conteúdo

Fóruns SQL e PL/SQL Sugestão para resolução de Select. Sugestão para resolução de Select.

#99200
felipeg
Participante

    Ola drigo,

    Conseguiu realizar a atividade? Precisa de mais algum auxilio?

    Atenciosamente,
    Felipe.

    [quote=”felipeg”:1jq5es4u]Bom dia

    Cara, segue um exemplo, coisa simples.
    Se quiser utilizar, alterar ou jogar fora (risos) sinta-se a vontade.

    CREATE TABLE teste2(cod NUMBER, nome VARCHAR2(100),valor NUMBER)
    /
    INSERT INTO teste2 VALUES(1,’aaaaa’, 1234)
    /
    INSERT INTO teste2 VALUES(1,’ccccc’, 6789)
    /
    INSERT INTO teste2 VALUES(1,’oooooo’, 555)
    /
    INSERT INTO teste2 VALUES(2,’xxxxx’, 101112)
    /
    INSERT INTO teste2 VALUES(2,’yyyyyy’, 5855)
    /
    INSERT INTO teste2 VALUES(3,’bbbbbb’, 3328)
    /
    INSERT INTO teste2 VALUES(8,’hhhhh’, 9999)
    /
    COMMIT
    /

    CREATE OR REPLACE FUNCTION lista_nome (p_cod IN NUMBER) RETURN varchar2
    AS

    v_cod NUMBER;
    v_nome VARCHAR2(100);
    concatena_nome VARCHAR2(4000);
    resultado VARCHAR2(8000);

    CURSOR lista_campos IS
    SELECT cod,nome FROM teste2 WHERE cod=p_cod ORDER BY cod;
    BEGIN

    OPEN lista_campos;
    LOOP
    FETCH lista_campos INTO v_cod, v_nome;
    EXIT WHEN lista_campos%NOTFOUND;

    concatena_nome:= concatena_nome || ' ' || v_nome; 
    

    END LOOP;
    CLOSE lista_campos;

    Resultado := (concatena_nome);
    RETURN resultado;
    END;
    /
    CREATE OR REPLACE FUNCTION lista_valor (p_cod IN NUMBER) RETURN varchar2
    AS

    v_cod NUMBER;
    v_valor NUMBER;
    concatena_valor VARCHAR2(4000);
    resultado VARCHAR2(8000);

    CURSOR lista_campos IS
    SELECT cod,valor FROM teste2 WHERE cod=p_cod ORDER BY cod;
    BEGIN

    OPEN lista_campos;
    LOOP
    FETCH lista_campos INTO v_cod, v_valor;
    EXIT WHEN lista_campos%NOTFOUND;

    concatena_valor:= concatena_valor || ' ' || v_valor;
    

    END LOOP;
    CLOSE lista_campos;

    Resultado := (concatena_valor);
    RETURN resultado;
    END;
    /

    SELECT cod, lista_nome(cod) AS nome, lista_valor(cod) AS valor FROM teste2 GROUP by cod ORDER BY cod;

    Espero ter ajudado!
    Atenciosamente,
    Felipe.[/quote]