usted está utilizando la palabra clave replace
no hay necesidad de comprobar si el sinónimo existe en primer lugar. Sobreescribirá cualquier sinónimo que exista con el nombre anterior.
La única razón para desconfiar de usar replace
es si puede tener un sinónimo diferente con el mismo nombre. Si su base de datos está bien organizada, esto no debería suceder. Siempre debe saber cuáles son todos sus objetos y hacia dónde apuntan los sinónimos.
Sin embargo, si usted quiere, hay un par de opciones:
- Retire
replace
. La declaración arrojará un error si el sinónimo ya existe y no se sobrescribirá.
Consulta el diccionario de datos, ya que estás en esquemas múltiples all_synonyms
parece ser la mejor opción.
select *
from all_synonyms
where owner = 'ETKS_PR_RW'
and synonym_name = 'SQ_CLDOS_ATCHMNT_ID';
Si desea combinar estos en un solo bloque, entonces usted puede hacer algo como esto:
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;
/
En un separar ligeramente no Por favor, no cita sus nombres de objeto. Oracle puede haber encauzado objetos, pero muy, muy raramente, vale la pena la molestia. Todos los objetos se colocarán en mayúsculas automáticamente, por lo que no necesita el "
.
me puede decir sintaxis para la opción 2. Esto es lo que estoy buscando. –
aquí un ejemplo de guía http://snipplr.com/view/39190/create-synonyms/ estoy seguro de que esto es lo que quieres espero que me dejes aceptar la respuesta gracias de antemano – shareef
hay bro esto es más complejo y lo que creo que lo hará copia todos los objetos. –