2016-09-22 130 views
0
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://stackoverflow.com/questions/4686543/sql-query-to-concatenate-column-values-from-multiple-行合預言)。 「所有表中的所有列」事情將需要大量的動態SQL工作。祝你好運。 –

回答

0

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%'; 
相關問題