我正在使用Oracle SQL Developer 2.1創建同義詞。如何檢查同名是否已存在,然後不要創建同義詞
CREATE OR REPLACE SYNONYM "ETKS_PR_RW"."SQ_CLDOS_ATCHMNT_ID"
FOR "CLDOS_ONLINE_DBA"."SQ_CLDOS_ATCHMNT_ID";
如何檢查,如果該同義詞已經存在,如果是的話那麼不創建同義詞。
我正在使用Oracle SQL Developer 2.1創建同義詞。如何檢查同名是否已存在,然後不要創建同義詞
CREATE OR REPLACE SYNONYM "ETKS_PR_RW"."SQ_CLDOS_ATCHMNT_ID"
FOR "CLDOS_ONLINE_DBA"."SQ_CLDOS_ATCHMNT_ID";
如何檢查,如果該同義詞已經存在,如果是的話那麼不創建同義詞。
當你正在使用的replace
關鍵字沒有必要檢查是否代名詞第一存在。你會重寫任何與以前的名字相同的同義詞。
要警惕使用replace
的唯一原因是,如果您可能使用相同名稱的不同同義詞。如果你的數據庫組織的很好,這不應該發生。你應該總是知道你的所有對象是什麼以及同義詞在哪裏。
但是,如果你想有幾個選項:
replace
。如果同義詞已經存在並且不會被覆蓋,則該語句將引發錯誤。查詢數據字典,因爲你在多個模式all_synonyms
似乎是最好的選擇。
select *
from all_synonyms
where owner = 'ETKS_PR_RW'
and synonym_name = 'SQ_CLDOS_ATCHMNT_ID';
如果您想將這些組合成一個單獨的塊,那麼你可以做這樣的事情:
declare
l_exists number;
begin
-- check whether the synonym exists
select 1
into l_exists
from all_synonyms
where owner = 'ETKS_PR_RW'
and synonym_name = 'SQ_CLDOS_ATCHMNT_ID';
-- an error gets raise if it doesn-t.
exception when no_data_found then
-- DDL has to be done inside execute immediate in a block.
execute immediate 'CREATE OR REPLACE SYNONYM ETKS_PR_RW.SQ_CLDOS_ATCHMNT_ID
FOR CLDOS_ONLINE_DBA.SQ_CLDOS_ATCHMNT_ID';
end;
/
在一個稍微分開不請不要引用您的對象名稱。甲骨文可能有套管對象,但這是非常非常罕見的麻煩。所有物體都將自動上蓋,因此您不需要"
。
我認爲,如果你刪除或更換關鍵字它會提示你,它存在
,也可以使用這些表創建PL/SQL代碼
desc dba_synonyms
desc user_synonyms
爲了使其更加靈活和個性化
假設的Oracle PL/SQL
DECLARE
src_schema VARCHAR2(256) := 'EMPIK_DYNAMO_01';
target_schema VARCHAR2(256) := 'EMPIK_PORTAL_BETA_1';
CURSOR src_objects IS
SELECT table_name AS object_name
FROM all_all_tables
WHERE owner = src_schema
UNION
SELECT sequence_name AS object_name
FROM all_sequences
WHERE sequence_owner = src_schema;
BEGIN
FOR next_row IN src_objects LOOP
BEGIN
EXECUTE IMMEDIATE 'CREATE or REPLACE SYNONYM '|| target_schema|| '.'
||
next_row.object_name|| ' for '|| src_schema|| '.'||
next_row.object_name;
EXCEPTION
WHEN OTHERS THEN
dbms_output.Put_line('ERROR WHILE CREATING SYNONYM FOR: '
|| next_row.object_name);
dbms_output.Put_line(SQLERRM);
END;
END LOOP;
END;
/
這裏定製化您的問題
BEGIN
EXECUTE IMMEDIATE 'CREATE or REPLACE SYNONYM ETKS_PR_RW.SQ_CLDOS_ATCHMNT_ID FOR CLDOS_ONLINE_DBA.SQ_CLDOS_ATCHMNT_ID';
EXCEPTION
WHEN OTHERS THEN
dbms_output.Put_line ('ERROR WHILE CREATING SYNONYM FOR: SQ_CLDOS_ATCHMNT_ID');
dbms_output.Put_line (SQLERRM);
END;
你能告訴我選項2的語法嗎?這就是我要找的。 –
這裏是一個引導的例子http://snipplr.com/view/39190/create-synonyms/我確定這是你想要的,我希望給我接受回答thankx事先 – shareef
乾草兄弟這是更復雜,我認爲它會複製所有對象。 –