在Oracle中的SYNONYM中获取特定列名称

时间:2017-03-07 10:05:55

标签: sql oracle synonym

使用此查询,我可以成功获取Oracle表的列名列表。

SELECT COLUMN_NAME
FROM USER_TAB_COLUMNS
WHERE table_name = 'TBL_NEWS' 
AND COLUMN_NAME LIKE ('GLOBE_%') 
ORDER BY  COLUMN_ID

我有一个同义词,我还需要获取该同义词的所有列名。那么如何扩展上面的查询以获取同义词中的所有列名称从GLOBE_开始?

3 个答案:

答案 0 :(得分:1)

同义词没有列,它引用的表具有。所以你可以用这个:

SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS atc
JOIN ALL_SYNONYMS als ON atc.table_name = als.table_name
WHERE als.SYNONYM_NAME='my_synonym'
  AND als.OWNER IN (USER, 'PUBLIC')
  AND atc.COLUMN_NAME LIKE ('GLOBE_%')
ORDER BY atc.COLUMN_ID

答案 1 :(得分:1)

根据您想要数据的架构范围 - 您可以使用ALL_TAB_COLUMNS和ALL_SYNONYMS或DBA_TAB_COLUMNS和DBA_SYNONYMS

SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS ATC JOIN ALL_SYNONYMS ALS ON ATC.table_name = ALS.table_name WHERE ALS.SYNONYM_NAME='my_synonym'      AND ATC.COLUMN_NAME LIKE ('GLOBE_%') ORDER BY ATC.COLUMN_ID;

or 


SELECT COLUMN_NAME FROM DBA_TAB_COLUMNS DTC JOIN DBA_SYNONYMS DS ON DTC.table_name = DS.table_name WHERE DS.SYNONYM_NAME='my_synonym'    AND DTC.COLUMN_NAME LIKE ('GLOBE_%') ORDER BY DTC.COLUMN_ID;

答案 2 :(得分:0)

而不是查询数据字典。您可以创建函数以返回表/视图/同义词中的列列表。

scp -r dir1/. remote:/newfolder