SOF*_*ser 12 sql oracle synonym
我正在使用Oracle SQL developer 2.1来创建同义词.
CREATE OR REPLACE SYNONYM "ETKS_PR_RW"."SQ_CLDOS_ATCHMNT_ID"
FOR "CLDOS_ONLINE_DBA"."SQ_CLDOS_ATCHMNT_ID";
Run Code Online (Sandbox Code Playgroud)
如果此同义词已经存在,我该怎么检查,如果有,则不要创建同义词.
Ben*_*Ben 25
当您使用replace关键字时,无需先检查同义词是否存在.您将覆盖以前名称存在的任何同义词.
警惕使用的唯一原因replace是,如果您可能使用具有相同名称的不同同义词.如果您的数据库组织良好,则不应发生这种情况.您应该始终知道所有对象是什么以及同义词指向的位置.
但是,如果您确实想要有以下几种选择:
replace.如果同义词已存在且不会被覆盖,则该语句将抛出错误.查询数据字典,因为你在多个模式中all_synonyms似乎是最好的选择.
select *
from all_synonyms
where owner = 'ETKS_PR_RW'
and synonym_name = 'SQ_CLDOS_ATCHMNT_ID';
Run Code Online (Sandbox Code Playgroud)如果您想将这些组合成一个块,那么您可以执行以下操作:
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;
/
Run Code Online (Sandbox Code Playgroud)
稍微单独请不要引用您的对象名称.Oracle可以使用套接字的对象,但这非常非常值得麻烦.所有对象都将自动为大写,因此您不需要".