我有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'
答案 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导出创建的,为什么所有同义词都缺失?这里有点不对劲。或者我错过了一些东西。