oracle设置公共同义词所有表或其他对象?

时间:2014-05-06 14:21:44

标签: oracle plsql plsqldeveloper synonym

我有productionDB和testDB.ProductionDB有表的同义词。现在我想为testDB的所有表创建同义词。如何我可以创建所有表的同义词。我可以获得列表同义词这个查询

 select *
 from all_synonyms s
 join all_objects o
 on s.table_owner = o.owner
 and s.table_name = o.object_name
 where s.table_owner = 'XYZ'

2 个答案:

答案 0 :(得分:2)

尝试以下查询:

SELECT CAST(dbms_metadata.get_ddl(object_type => 'SYNONYM',
                                  name        => a.synonym_name,
                                  SCHEMA      => a.owner) AS VARCHAR2(4000))
  FROM ALL_SYNONYMS a;

分享并享受。

答案 1 :(得分:1)

这是一个启动脚本 - 它将sql写为输出。运行它,首先读取输出。当你认为它是正确的时,取消注释最后一行 - 它必须以特权运行。

set pages 0
set feed off
set linesize 180
set trimspool on
spool syn.sql
select 'CREATE PUBLIC SYNONYM ' || SYNONYM_NAME | ' FOR ' ||
       TABLE_OWNER || '.' || TABLE_NAME || ';'
       from ALL_SYNONYMS
       where DB_LINK is NULL;
select 'CREATE PUBLIC SYNONYM ' || SYNONYM_NAME | ' FOR ' ||
       TABLE_OWNER || '.' || TABLE_NAME || '@' || DB_LINK || ';'
       from ALL_SYNONYMS
       where DB_LINK is NOT NULL;

spool off
--   uncomment after it has been tested 
--@syn.sql

如果testDB是使用PROD导出创建的,为什么所有同义词都缺失?这里有点不对劲。或者我错过了一些东西。