Sql 如果同义词已经存在,我如何检查don';不要创造同义词
我正在使用Oracle SQL developer 2.1创建同义词Sql 如果同义词已经存在,我如何检查don';不要创造同义词,sql,oracle,synonym,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"; 如何检查此同义词是否已存在,如果已存在,则不要创建该同义词。我认为如果删除或替换关键字,将提示您该同义词已存在 也可以使用这些表创建pl/sql代码 desc dba_synonyms desc user
CREATE OR REPLACE SYNONYM "ETKS_PR_RW"."SQ_CLDOS_ATCHMNT_ID"
FOR "CLDOS_ONLINE_DBA"."SQ_CLDOS_ATCHMNT_ID";
如何检查此同义词是否已存在,如果已存在,则不要创建该同义词。我认为如果删除或替换关键字,将提示您该同义词已存在 也可以使用这些表创建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;
在使用
replace
关键字时,无需首先检查同义词是否存在。你将重写与先前名字存在的任何同义词
使用replace
时要小心的唯一原因是,如果您可能有同名的不同同义词。如果你的数据库组织得很好,这种情况就不会发生。您应该始终知道所有对象是什么以及同义词指向何处
但是,如果您确实想这样做,有两种选择:
更换。如果同义词已存在且无法重写,则语句将抛出错误
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;
/
在一个稍微分开的表格上,请不要引用您的对象名称。甲骨文可以使用cased对象,但它很少值得这么麻烦。所有对象都将自动大写,因此您不需要
“
您能告诉我选项2的语法吗。这就是我要找的。这里是一个指南示例。我确定这是您想要的我希望给我接受答案提前感谢Hay bro这更复杂,我认为它会复制所有对象。请提供更多信息您的问题是模糊的:如果您希望创建一个syn并检测存在,请选择上面的选项1如果您想要创建syn对于模式中的对象,请选择选项2,并将适当的位置放在“请告诉我您的问题”中的更多详细信息!!编辑你的问题,你可以根据我的场景发布脚本,我可以在上面创建同义词,检查它是否已经存在,然后不创建。