Oracle consente di rinominare le colonne esistenti in una tabella. Utilizza la clausola RENAME COLUMN dell'istruzione ALTER TABLE per rinominare la colonna i,e altera table rename column in Oracle
Sintassi
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Vediamo questo esempio
SQL> CREATE TABLE DEPT_MASTER ( dept_nr NUMBER UNIQUE, dept_name varchar2(100) NOT NULL, dept_status NUMBER(1,0) NOT NULL, created_at date ); Table created. SQL> Desc DEPT_MASTER
Rinominiamo ora la colonna
SQL> ALTER TABLE DEPT_MASTER RENAME COLUMN DEPT_NR to DEPT_NR_NEW; Table altered. SQL>Desc DEPT_MASTER
Limitazione e cosa è consentito
(1) Non è possibile rinominare più volte nella singola istruzione
Vediamo con l'esempio.
SQL> ALTER TABLE DEPT_MASTER RENAME COLUMN DEPT_NR_NEW to DEPT_NR, DEPT_NAME to DEPT_N; 2 ALTER TABLE DEPT_MASTER * ERROR at line 1: ORA-23290: This operation may not be combined with any other operation SQL> ALTER TABLE DEPT_MASTER RENAME COLUMN DEPT_NR_NEW to DEPT_NR,COLUMN DEPT_NAME to DEPT_N; 2 ALTER TABLE DEPT_MASTER * ERROR at line 1: ORA-23290: This operation may not be combined with any other operation
Quindi ottieni l'errore ORA quando provi a includere due colonne al suo interno. Devi eseguire istruzioni separate per modificare le colonne multiple.
ALTER TABLE DEPT_MASTER RENAME COLUMN DEPT_NR_NEW to DEPT_NR; ALTER TABLE DEPT_MASTER RENAME COLUMN DEPT_NAME to DEPT_N;
(2) Puoi rinominare la colonna anche se abbiamo una chiave primaria, vincolo presente su di essa.
Inizierà automaticamente a puntare al nuovo nome della colonna
SQL> CREATE TABLE "EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2) check(SAL > 1000), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") ); Table created. SQL> alter table emp rename column EMPNO to EMP_NO; Table altered. SQL> desc emp Name Null? Type --- ---- --- EMP_NO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) SQL> alter table emp rename column sal to salary; Table altered SQL> desc emp Name Null? Type --- ----- ---- EMP_NO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SALARY NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) SQL> set long 2000 SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual; CREATE TABLE "SCOTT"."EMP" ( "EMP_NO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SALARY" NUMBER(7,2), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CHECK ("SALARY">1000) ENABLE, CONSTRAINT "PK_EMP" PRIMARY KEY ("EMP_NO") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 TABLESPACE "TOOLS" ENABLE ) SEGMENT CREATION DEFERRED PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
Puoi vedere dall'esempio precedente, verificare che il vincolo venga modificato nel nuovo nome della colonna e anche la chiave primaria venga modificata in una nuova colonna
Prendiamo anche un altro esempio con vincoli di chiave esterna
SQL> CREATE TABLE "DEPT" ( "DEPTNO" NUMBER(2,0), "DNAME" VARCHAR2(14), "LOC" VARCHAR2(13), CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO") ) Table created. SQL> CREATE TABLE "EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"), CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO") REFERENCES "DEPT" ("DEPTNO") ENABLE ); Table created. SQL> insert into DEPT values(10, 'ACCOUNTING', 'NEW YORK'); insert into dept values(20, 'RESEARCH', 'DALLAS'); insert into dept values(30, 'RESEARCH', 'DELHI'); insert into dept values(40, 'RESEARCH', 'MUMBAI'); SQL> insert into emp values( 7698, 'Blake', 'MANAGER', 7839, to_date('1-5-2007','dd-mm-yyyy'), 2850, null, 10 ); SQL> insert into emp values( 7782, 'Clark', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 2450, null, 10 ); insert into emp values( 7788, 'Scott', 'ANALYST', 7566, to_date('9-6-2012','dd-mm-yyyy'), 3000, null, 20 ); insert into emp values( 7789, 'TPM', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 3000, null, null ); insert into emp values( 7560, 'T1OM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, 20 ); insert into emp values( 7790, 'TOM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, null ); SQL> SQL> commit; Commit complete. SQL> ALTER TABLE DEPT RENAME COLUMN DEPTNO to DEPTNO_NEW; Table altered. SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual; CREATE TABLE "SCOTT"."EMP" ( "EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"), CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO") REFERENCES "SCOTT"."DEPT" ("DEPTNO_NEW") ENABLE ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "TOOLS"
Possiamo vedere dall'esempio precedente, il vincolo di chiave esterna inizia a puntare automaticamente al nuovo nome di colonna.
(3) È possibile rinominare la colonna se si dispone della procedura, delle visualizzazioni su quella tabella e della colonna.
Ma dopo la ridenominazione, questi oggetti non saranno più validi e dovrai modificare la vista e il pacchetto per compilarlo. Vediamolo con un esempio
SQL> CREATE TABLE DEPT_MASTER ( dept_nr NUMBER UNIQUE, dept_name varchar2(100) NOT NULL, dept_status NUMBER(1,0) NOT NULL, created_at date ); Table created. SQL> create view dept_vw as select dept_nr,dept_name from DEPT_MASTER; View created. SQL> ALTER TABLE DEPT_MASTER RENAME COLUMN DEPT_NR to DEPT_NR_NEW; Table altered. SQL> select status from user_objects where object_name='DEPT_VW'; STATUS ------ INVALID SQL> alter view DEPT_VW compile; Warning: View altered with compilation errors. SQL> create or replace view dept_vw as select dept_nr_new,dept_name from DEPT_MASTER; View created. SQL> select status from user_objects where object_name='DEPT_VW'; STATUS ------ VALID
Spero che questo post ti piaccia sulla colonna di modifica del nome della tabella in Oracle. Si prega di fornire feedback
Legge anche
alter table in Oracle :Alter table in Oracle viene utilizzato per modificare una colonna, eliminare e aggiungere vincoli, modificare il tipo di dati della colonna della tabella, modificare i parametri di archiviazione della tabella
alter table add column oracle:utile approfondimento su Come modificare la tabella aggiungi colonna oracle. I dettagli sulla funzionalità di aggiunta rapida delle colonne introdotta in Oracle 11g sono inoltre forniti
oracle crea una tabella:le tabelle sono l'unità di base dell'archiviazione dei dati in un database Oracle. descriviamo come utilizzare il comando Oracle create table per creare una tabella con chiave esterna/chiave primaria
alterare la colonna di rilascio della tabella in Oracle:Scopri come eliminare la colonna usando alterare la colonna di rilascio della tabella oracle, alterare la tabella imposta la colonna inutilizzata oracle e altera la tabella elimina le colonne inutilizzate
come controllare tutti i vincoli su una tabella in Oracle:come controllare tutti i vincoli su una tabella in Oracle utilizzando dba_constraints e dba_cons_columns viste del dizionario dei dati nel database Oracle
modificare il tipo di dati della colonna in Oracle:Dai un'occhiata a questo post su come eliminare la colonna in Oracle usando Oracle altera table per modificare la colonna. Modifica colonna può cambiare il valore predefinito, consentendo non null
https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables003.htm