2014-08-29 95 views
0

我有多個表。如何在oracle 10g中創建多個表同義詞?

我想這個查詢:

CREATE PUBLIC SYNONYM CHKWEBUSER FOR NEST.CHKWEBUSER; 

但我有多個表像5000我怎麼能在一個查詢創建同義詞?

+0

不確定我是否按照正確的方式...您是否想要爲特定模式中的每個表創建同義詞還是其他內容? – yamny 2014-08-29 07:02:30

+0

我想創建所有表的同義詞 – Black 2014-08-29 07:05:59

回答

0

以下聲明將生成的必要陳述。

您需要將該語句的輸出緩衝/導出到SQL腳本中,然後運行該腳本。

你如何做到這一點完全取決於你正在使用哪個SQL客戶端。使用SQL * Plus,您可以使用spool命令。

select 'create public synonym '||table_name||' for '||owner||'.'||table_name||';' 
from all_tables 
where owner = 'NEST'; 
+0

先生我想創建同義詞不選擇.. – Black 2014-08-29 07:21:35

+0

@黑色:請再次閱讀我的答案。 '選擇'將會產生必要的陳述。將輸出保存到文件中並運行該文件。 – 2014-08-29 07:26:58

1

您不能使用單個命令簡單地爲所有表創建同義詞。你需要做的是創建/生成一個腳本,將爲你做到這一點。

在這裏,你有一個簡單的腳本,將生成一個CREATE PUBLIC SYNONYM...命令列表,您可以稍後運行。

DECLARE 

    CURSOR cTables IS 
    SELECT * 
     FROM ALL_TABLES TAB 
    WHERE TAB.OWNER = 'NEST'; /* Tune the where clause to your needs */ 

    sSql VARCHAR2(20000); 

BEGIN 

    FOR rTable in cTables LOOP 

    sSql := 'CREATE PUBLIC SYNONYM ' || rTable.TABLE_NAME || ' FOR NEST.' || rTable.TABLE_NAME || ';'; 
    DBMS_OUTPUT.PUT_LINE(sSql); 

    END LOOP; 

END; 

這個腳本會打印出類似這樣的命令:

CREATE PUBLIC SYNONYM MY_TABLE FOR NEST.MY_TABLE 

另外,除了使用DBMS_OUTPUT.PUT_LINE你可以直接調用去:

EXECUTE IMMEDIATE sSql; 

代替。這將自動爲您創建同義詞。