Se voi
ALTER TABLE old_table_name
RENAME TO new_table_name;
tutti i vincoli esistenti (chiave estera e di altri vincoli) e trigger sarà riferimento all'oggetto appena rinominato. Le sequenze non hanno alcuna relazione con le tabelle, quindi non ci sarà alcun impatto sulle sequenze (anche se se si intende che si fa riferimento alla sequenza in un trigger sulla tabella, il trigger continuerà a fare riferimento alla stessa sequenza dopo la rinomina). Tutte le stored procedure che hai scritto che fanno riferimento al vecchio nome della tabella, tuttavia, dovranno essere aggiornate per fare riferimento al nuovo nome della tabella.
Ora, mentre i vincoli e i trigger continueranno a funzionare correttamente, manterranno i loro nomi originali. Se si hanno convenzioni di denominazione per questi oggetti che si desidera mantenere dopo il nome della tabella, è necessario fare di più. Ad esempio, se si desidera un livello di riga prima di trigger di inserimento sul tavolo FOO
di essere nominato TRG_BI_FOO
e si rinomina il tavolo per BAR
, avresti bisogno di modificare il grilletto in modo esplicito di cambiare il suo nome
ALTER TRIGGER trg_bi_foo
RENAME TO trg_bi_bar;
Allo stesso modo, avresti bisogno di rinominare i vincoli e gli indici
ALTER TABLE bar
RENAME CONSTRAINT pk_foo TO pk_bar;
fonte
2012-02-14 15:38:26
Grazie Adam. @Justin ha suggerito che i trigger continueranno a funzionare correttamente. Stai dicendo che dovrò correggere manualmente i trigger? Ad esempio, se avessi un trigger autoincrement (CREATE TRIGGER trg_bi_foo PRIMA DI INSERIRE SU foo FOR EACH ROW INIZIA SELEZIONA seq_foo.NEXTVAL INTO: NEW.foo_id FROM DUAL; END;) il "BEFORE INSERT ON foo" dovrebbe essere aggiornato automaticamente su "PRIMA" INSERIRE sulla barra "? –
Sì.Ma se si ha qualche altro trigger su qualche altra tabella che esegue una query con 'foo', quel trigger non verrà automaticamente aggiornato per interrogare su' bar'. –