如何从所有表中选择所有可能的列值?
问题描述:
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
答
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%';
您能否提供样本数据来说明您要实现的目标?我有点不清楚列表中列的所有可能值是什么意思。 – Siyual
你不能。您正在查询元数据表,并且这些表没有关于实际数据的信息。做你想做的事情需要动态SQL(即'execute')。 –
[请参阅此问题及其答案作为生成逗号分隔值列表的指南](http://*.com/questions/4686543/sql-query-to-concatenate-column-values-from-multiple-行合预言)。 “所有表中的所有列”事情将需要大量的动态SQL工作。祝你好运。 –