› Fóruns › SQL e PL/SQL › Sugestão para resolução de Select. › Sugestão para resolução de Select.
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]