如何从所有表中选择所有可能的列值?

问题描述:

SELECT POM.TABLE_NAME, POM.COLUMN_NAME 
FROM ALL_TAB_COLUMNS POM 
WHERE POM.COLUMN_NAME LIKE'%STATUS%' 

我想查看列表中列的所有可能的值(如果可能,在一行中)。我如何修改这个选择来做到这一点?如何从所有表中选择所有可能的列值?

我想这样

TABLE_NAME | COLUMN_NAME |VALUES 
-----------| ----------- | ------- 
CAR  | COLOR  | RED,GREEN 
+2

您能否提供样本数据来说明您要实现的目标?我有点不清楚列表中列的所有可能值是什么意思。 – Siyual

+2

你不能。您正在查询元数据表,并且这些表没有关于实际数据的信息。做你想做的事情需要动态SQL(即'execute')。 –

+0

[请参阅此问题及其答案作为生成逗号分隔值列表的指南](http://*.com/questions/4686543/sql-query-to-concatenate-column-values-from-multiple-行合预言)。 “所有表中的所有列”事情将需要大量的动态SQL工作。祝你好运。 –

soemthing您可以使用下面的查询您的要求。它为表获取不同的列值。 它只能用于具有有限数量不同值的表格,因为我使用了LISTAGG函数。

SELECT POM.TABLE_NAME, POM.COLUMN_NAME, 
     XMLTYPE(DBMS_XMLGEN.GETXML('SELECT LISTAGG(COLUMN_NAME,'','') WITHIN GROUP (ORDER BY COLUMN_NAME) VAL 
            FROM (SELECT DISTINCT '|| POM.COLUMN_NAME ||' COLUMN_NAME 
             FROM '||POM.OWNER||'.'||POM.TABLE_NAME||')') 
      ).EXTRACT('/ROWSET/ROW/VAL/text()').GETSTRINGVAL() VAL 
FROM ALL_TAB_COLUMNS POM 
WHERE POM.COLUMN_NAME LIKE'%STATUS%';