che si sta utilizzando la parola chiave replace
non v'è alcuna necessità di verificare se il sinonimo esiste prima. Sovrascriverete qualunque sinonimo esistesse con il nome precedente.
L'unico motivo per diffidare dell'utilizzo di replace
è se si potrebbe avere un sinonimo diverso con lo stesso nome. Se il tuo database è organizzato bene, questo non dovrebbe accadere. Dovresti sempre sapere quali sono tutti i tuoi oggetti e dove puntano i sinonimi.
Tuttavia, se si vuole ci sono un paio di opzioni:
- Rimuovere
replace
. L'istruzione genererà un errore se il sinonimo esiste già e non verrà sovrascritto.
Interrogare il dizionario dei dati, dato che ci si trova in più schemi all_synonyms
sembra la soluzione migliore.
select *
from all_synonyms
where owner = 'ETKS_PR_RW'
and synonym_name = 'SQ_CLDOS_ATCHMNT_ID';
Se si desidera combinare questi in un unico blocco, allora si può fare qualcosa di simile:
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;
/
Su un po 'separato non Si prega di non citazione vostri nomi degli oggetti. Oracle può avere oggetti cased, ma è molto, molto raramente vale la pena. Tutti gli oggetti saranno automaticamente sovraimpressi, quindi non è necessario lo "
.
puoi dirmi la sintassi per l'opzione 2. Questo è quello che sto cercando. –
qui un esempio di guida http://snipplr.com/view/39190/create-synonyms/ sono sicuro che questo è quello che vuoi spero di darmi risposta thankx in anticipo – shareef
hay bro questo è più complesso e cosa penso che sarà copia tutti gli oggetti. –