我有多個表。如何在oracle 10g中創建多個表同義詞?
我想這個查詢:
CREATE PUBLIC SYNONYM CHKWEBUSER FOR NEST.CHKWEBUSER;
但我有多個表像5000我怎麼能在一個查詢創建同義詞?
我有多個表。如何在oracle 10g中創建多個表同義詞?
我想這個查詢:
CREATE PUBLIC SYNONYM CHKWEBUSER FOR NEST.CHKWEBUSER;
但我有多個表像5000我怎麼能在一個查詢創建同義詞?
以下聲明將生成的必要陳述。
您需要將該語句的輸出緩衝/導出到SQL腳本中,然後運行該腳本。
你如何做到這一點完全取決於你正在使用哪個SQL客戶端。使用SQL * Plus,您可以使用spool
命令。
select 'create public synonym '||table_name||' for '||owner||'.'||table_name||';'
from all_tables
where owner = 'NEST';
先生我想創建同義詞不選擇.. – Black 2014-08-29 07:21:35
@黑色:請再次閱讀我的答案。 '選擇'將會產生必要的陳述。將輸出保存到文件中並運行該文件。 – 2014-08-29 07:26:58
您不能使用單個命令簡單地爲所有表創建同義詞。你需要做的是創建/生成一個腳本,將爲你做到這一點。
在這裏,你有一個簡單的腳本,將生成一個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;
代替。這將自動爲您創建同義詞。
不確定我是否按照正確的方式...您是否想要爲特定模式中的每個表創建同義詞還是其他內容? – yamny 2014-08-29 07:02:30
我想創建所有表的同義詞 – Black 2014-08-29 07:05:59