Oracle
 sql >> база данни >  >> RDS >> Oracle

променете колоната за преименуване на таблица в базата данни на Oracle

Oracle ви позволява да преименувате съществуващи колони в таблица. Използвайте клаузата RENAME COLUMN от оператора ALTER TABLE , за да преименувате колона i, т.е. да промените колоната за преименуване на таблица в oracle

Синтаксис

ALTER TABLE table_name
RENAME COLUMN old_name to new_name;

Нека видим този пример

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

Нека сега преименуваме колоната

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

SQL>Desc DEPT_MASTER

Ограничение и какво е разрешено

(1) Не можете да преименувате многократно в един израз

Да видим с примера.

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

Така че получавате грешката ORA, когато се опитвате да включите две колони в нея. Трябва да изпълните отделни оператори, за да промените множеството колони.

ALTER TABLE DEPT_MASTER
RENAME COLUMN DEPT_NR_NEW to DEPT_NR;

ALTER TABLE DEPT_MASTER
RENAME COLUMN DEPT_NAME to DEPT_N;

(2) Можете да преименувате колоната, дори да имаме първичен ключ, ограничение върху нея.

Тя автоматично ще започне да сочи към името на новата колона

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

Можете да видите от предишния пример, проверка на ограничението се променя на новото име на колона, а също така първичният ключ също се променя на нова колона

Нека вземем и друг пример с ограничения на външния ключ

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"

От предишния пример можем да видим, че ограничението на външния ключ започва автоматично да сочи към името на новата колона.

(3) Можете да преименувате колоната, ако имате процедурата, изгледите на тази таблица и колоната.

Но след преименуването тези обекти ще станат невалидни и трябва да промените изгледа и пакета, за да го компилирате. Нека видим това с пример

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

Надяваме се, че ви харесва тази публикация за колоната за преименуване на таблицата в oracle. Моля, дайте обратна връзка

Също чете
alter table in oracle :Alter table in oracle се използва за промяна на колона, пускане и добавяне на ограничения, промяна на типа данни на колоната на таблицата, промяна на параметрите за съхранение на таблицата
alter table add column oracle:Полезно поглед върху Как да промените таблицата, добавите колона оракул. Подробности за функцията за бързо добавяне на колони, въведена в oracle 11g, също са дадени
оракул създава таблица:Таблиците са основната единица за съхранение на данни в базата данни на Oracle. ние разглеждаме как да използвате командата за създаване на таблица на Oracle за създаване на таблица с външен ключ /първичен ключ
променете колона за отпадане на таблицата в oracle:Вижте как да премахнете колона с помощта на alter table drop column oracle, alter table set неизползвана колона oracle и alter table drop неизползвани колони
как да проверите всички ограничения на таблица в oracle:как да проверите всички ограничения на таблица в oracle, използвайки dba_constraints и dba_cons_columns изгледи на речник на данни в базата данни на Oracle
променете типа данни на колоната в oracle:Вижте тази публикация за това как да пуснете колона в oracle с помощта на oracle alter table, модифицирайте колоната. Колоната Modify може да променя стойността по подразбиране, позволявайки да не е null
https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables003.htm


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Клиентски и мрежови компоненти на Oracle не бяха открити

  2. Как да ВИЗИРАТЕ_ЗВУК в Oracle Forms

  3. Актуализиране на таблицата на Oracle от макрос на Excel VBA с помощта на ODBC връзка

  4. Възможно ли е да се препратят към имена на колони чрез свързващи променливи в Oracle?

  5. Хибернация на собствената заявка - колона char(3).