sql >> Database >  >> RDS >> Oracle

verander tabel hernoem kolom in Oracle-database

Met Oracle kunt u bestaande kolommen in een tabel hernoemen. Gebruik de clausule RENAME COLUMN van de instructie ALTER TABLE om de kolom te hernoemen, d.w.z. de naam van de tabelkolom in oracle te wijzigen

Syntaxis

ALTER TABLE table_name
RENAME COLUMN old_name to new_name;

Laten we dit voorbeeld bekijken

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

Laten we de kolom nu hernoemen

SQL> ALTER TABLE DEPT_MASTER
RENAME COLUMN DEPT_NR to DEPT_NR_NEW;
Table altered.

SQL>Desc DEPT_MASTER

Beperking en wat is toegestaan

(1) U kunt niet meerdere keren hernoemen in de enkele instructie

Laten we eens kijken met het voorbeeld.

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

U krijgt dus de ORA-fout wanneer u probeert er twee kolommen in op te nemen. U moet afzonderlijke instructies uitvoeren om de meerdere kolommen te wijzigen.

ALTER TABLE DEPT_MASTER
RENAME COLUMN DEPT_NR_NEW to DEPT_NR;

ALTER TABLE DEPT_MASTER
RENAME COLUMN DEPT_NAME to DEPT_N;

(2) U kunt de kolom hernoemen, zelfs als we een primaire sleutel hebben, er is een beperking.

Het zal automatisch beginnen te verwijzen naar de nieuwe kolomnaam

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

U kunt in het vorige voorbeeld zien dat de controlebeperking wordt gewijzigd in de nieuwe kolomnaam en ook de primaire sleutel wordt gewijzigd in een nieuwe kolom

Laten we nog een voorbeeld nemen met beperkingen voor externe sleutels

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"

In het vorige voorbeeld kunnen we zien dat de externe-sleutelbeperking automatisch naar de nieuwe kolomnaam begint te wijzen.

(3) U kunt de naam van de kolom wijzigen als u de procedure, weergaven voor die tabel en kolom hebt.

Maar na het hernoemen worden deze objecten ongeldig en moet u de weergave en het pakket wijzigen om het te compileren. Laten we dit aan de hand van een voorbeeld bekijken

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

Ik hoop dat je dit bericht leuk vindt op de naam van de kolom wijzigen in de kolom in Oracle. Geef alsjeblieft feedback

Leest ook
tabel wijzigen in Oracle :Tabel wijzigen in Oracle wordt gebruikt om een ​​kolom te wijzigen, beperkingen weg te laten en toe te voegen, het gegevenstype van de tabelkolom te wijzigen, de tabelopslagparameters te wijzigen
tabel wijzigen kolom toevoegen Oracle:Nuttig inzicht in het wijzigen van tabel toevoegen kolom orakel. Details over de functie voor snel toevoegen van kolommen, geïntroduceerd in oracle 11g, worden ook gegeven
oracle maak een tabel:Tabellen zijn de basiseenheid voor gegevensopslag in een Oracle-database. we bespreken hoe u de Oracle-opdracht tabel maken kunt gebruiken om een ​​tabel te maken met een externe sleutel /primaire sleutel
tabel drop-kolom in orakel wijzigen:bekijk hoe u een kolom kunt laten vallen met behulp van verander table drop column oracle, verander tabel set ongebruikte kolom orakel en verander tabel laat ongebruikte kolommen vallen
hoe controleer je alle beperkingen op een tabel in oracle:hoe controleer je alle beperkingen op een tabel in orakel met behulp van dba_constraints en dba_cons_columns datadictionary-weergaven in de Oracle-database
wijzig het kolomgegevenstype in oracle:Bekijk dit bericht over hoe je een kolom in orakel kunt laten vallen met behulp van de orakel-altertabel om de kolom te wijzigen. Kolom wijzigen kan de standaardwaarde wijzigen, waardoor geen null
https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables003.htm
https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables003.htm


  1. Python en MySQL gebruiken in het ETL-proces

  2. JSON_TYPE() - Krijg een JSON-waardetype in MySQL

  3. COALESCE-functie gebruiken om waarden gescheiden te maken met komma's

  4. Verbinding maken met MySQL met Node.js