oracle 批量獲取synonym同義詞的ddl文

一、通過查詢dba_synonyms表中的字段,拼接成一個ddl文。

getSynonymSql.sql

  select -- s.*,
            'CREATE OR REPLACE '||decode(s.OWNER,'PUBLIC','PUBLIC ','')||'SYNONYM '||
            decode(s.OWNER,'PUBLIC','',s.OWNER||'.')||s.SYNONYM_NAME||' FOR '||
            decode(s.TABLE_OWNER,NULL,NULL,s.TABLE_OWNER||'.')||s.TABLE_NAME||
            decode(s.DB_LINK,NULL,NULL,'@'||s.DB_LINK)||';' as cmd
     from dba_synonyms s
     where s.DB_LINK is not null
     order by s.OWNER, s.SYNONYM_NAME;

二、把查詢的結果輸到txt文件中
getSynonymRunSql.sql

set lin 160
set pages 9999
--C:\sr\db\getSQL\synonyms.txt 要輸出的文件
spool C:\sr\db\getSQL\synonyms.txt
--C:\sr\db\getSQL\getSynonymsSql 查詢sql文件
@"C:\sr\db\getSQL\getSynonymsSql"
spool off
exit; 

三、連接數據庫並執行第二步的sql語句。
runAll.bat

#通過SQLplus連接數據庫,並執行getSynonymRunSql.sql
sqlplus username/password@dbName @getSynonymRunSql.sql

結語:
其實我 是想做成可以連接不同DB也能導出,無奈時間有限。大家有啥想法歡迎評論探討。
說明,我現在的做法是做多個getSynonymRunSql.sql 然後連接不同的DB去獲取。

sqlplus username/password@dbName1 @getSynonymsRunSql01.sql

sqlplus username/password@dbName2 @getSynonymsRunSql02.sql

sqlplus username/password@dbName3 @getSynonymsRunSql03.sql

sqlplus username/password@dbName4 @getSynonymsRunSql04.sql

sqlplus username/password@dbName5 @getSynonymsRunSql05.sql

sqlplus username/password@dbName6 @getSynonymsRunSql06.sql

原創文章轉載請註明出處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章