Oracle umožňuje přejmenovat existující sloupce v tabulce. Použijte klauzuli RENAME COLUMN příkazu ALTER TABLE k přejmenování sloupce i, tedy alter table rename sloupce v oracle
Syntaxe
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Podívejme se na tento příklad
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
Pojďme nyní sloupec přejmenovat
SQL> ALTER TABLE DEPT_MASTER RENAME COLUMN DEPT_NR to DEPT_NR_NEW; Table altered. SQL>Desc DEPT_MASTER
Omezení a co je povoleno
(1) V jednom příkazu nelze vícekrát přejmenovat
Podívejme se na příklad.
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
Takže při pokusu o zahrnutí dvou sloupců se zobrazí chyba ORA. Chcete-li změnit více sloupců, musíte provést samostatné příkazy.
ALTER TABLE DEPT_MASTER RENAME COLUMN DEPT_NR_NEW to DEPT_NR; ALTER TABLE DEPT_MASTER RENAME COLUMN DEPT_NAME to DEPT_N;
(2) Sloupec můžete přejmenovat, i když máme primární klíč, omezení.
Začne automaticky ukazovat na nový název sloupce
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 Z předchozího příkladu můžete vidět, že se omezení změní na nový název sloupce a také se primární klíč změní na nový sloupec
Vezměme si další příklad s omezeními cizího klíče také
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" Z předchozího příkladu můžeme vidět, že omezení cizího klíče začne automaticky ukazovat na název nového sloupce.
(3) Sloupec můžete přejmenovat, pokud máte proceduru, pohledy na tuto tabulku a sloupec.
Po přejmenování se však tyto objekty stanou neplatnými a budete muset upravit pohled a balíček, abyste jej mohli zkompilovat. Podívejme se na to na příkladu
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
Doufám, že se vám líbí tento příspěvek ve sloupci alter table rename v oracle. Poskytněte nám prosím zpětnou vazbu
Také čte
alter table v oracle:Alter table v oracle se používá k úpravě sloupce, zrušení a přidání omezení, změně datového typu sloupce tabulky, změně parametrů úložiště tabulky
alter table add column oracle:Užitečné pohled na Jak změnit tabulku přidání sloupce Oracle. Podrobnosti o funkci rychlého přidávání sloupců představené v oracle 11g jsou také uvedeny
oracle create a table:Tabulky jsou základní jednotkou pro ukládání dat v databázi Oracle. zabýváme se tím, jak používat příkaz Oracle create table k vytvoření tabulky s cizím klíčem /primárním klíčem
změnit sloupec upuštění tabulky v oracle:Podívejte se, jak zrušit sloupec pomocí alter tabulky upustit sloupec Oracle, změnit sadu tabulek nepoužívaný sloupec oracle a změnit tabulku vypustit nepoužívané sloupce
jak zkontrolovat všechna omezení v tabulce v oracle:jak zkontrolovat všechna omezení v tabulce v oracle pomocí pohledů dba_constraints a dba_cons_columns datového slovníku v databázi Oracle
upravit datový typ sloupce v oracle:Podívejte se na tento příspěvek o tom, jak vypustit sloupec v oracle pomocí oracle alter table upravit sloupec. Sloupec Upravit může měnit výchozí hodnotu, což neumožňuje hodnotu null
https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables003.htm