Função Lista Agregada ou ListaGG

A função LISTAGG (list aggregate | lista agregada), é uma função SQL de grupo específica do Oracle, que agrupa os dados na mesma linha dentro de uma instrução SELECT, você pode utilizá-la sozinha para produzir conjuntos de dados agrupados por linhas simples, ou em conjunto com a função GROUP BY, abaixo alguns exemplos.

 

Exemplo:

SELECT LISTAGG(product_name, ', ') WITHIN GROUP (ORDER BY product_name) "Product_Listing"
FROM products;

Irá retornar o resultado como:

Product_Listing
Apples, Bananas, Oranges, Pears

 

Consulta SQL para localizar valor em todas as tabelas

Segue script abaixo que efetua uma pesquisa em todas as tabelas e suas respectivas colunas em busca de um determinado valor (texto, numero, data) com um determinado tipo de dado.


SET SERVEROUTPUT ON SIZE 100000

DECLARE
match_count INTEGER;
-- Digite o OWNER da tabela você está procurando
v_owner VARCHAR2(255) :='SEU_OWNER';

-- Digite o tipo de dado você procura (em LETRAS MAIÚCULA)
-- VARCHAR2, NUMBER, etc.
v_data_type VARCHAR2(255) :='%VARCHAR2%';

-- Digite o textp que você deseja localizar
v_search_string VARCHAR2(4000) :='%MARIA%';

BEGIN
dbms_output.put_line('passo 1' );
FOR t IN (SELECT table_name, column_name FROM all_tab_columns where owner=v_owner and data_type LIKE v_data_type) LOOP
dbms_output.put_line(table_name);
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM ' || v_owner || '.' || t.table_name || ' WHERE ' || t.column_name || ' LIKE :1'
INTO match_count
USING v_search_string;

IF match_count > 0 THEN
dbms_output.put_line( t.table_name || ' ' || t.column_name || ' ' || match_count );
END IF;

END LOOP;
END;

Concatenando linhas de uma tabela em uma única linha na consulta sql no oracle

Se você já precisou concatenar  várias linhas em uma única coluna, separando-as por vírgula, segue uma dica de como fazer essa consulta no exemplo  abaixo

Você tem uma TABELA tab_01 no seguinte formato :

“CAMPO”
—————
“familia”
“casais”
“saude”
“nerd”
“psiquiatria”

E você quer realizar uma consulta onde o conteúdo da tab_01 seja concatenado em uma única linha da seguinte forma

“CAMPO”
——————-
“casais,familia,nerd,psiquiatria,saude”

O consulta sql abaixo resolve seu problema no Oracle 10g ou superior

SELECT LTRIM(SYS_CONNECT_BY_PATH(CAMPO, ‘,’),’,’) CAMPO
FROM ( SELECT CAMPO,
ROW_NUMBER() OVER (ORDER BY CAMPO) FILA
FROM tab_01)
WHERE CONNECT_BY_ISLEAF = 1
START WITH FILA = 1 CONNECT BY PRIOR FILA = FILA – 1

 

No mysql você faz isso  com uma função chamada “group_concat”