我创建了下表
CREATE TABLE PLACE(
POSTCODE VARCHAR(10) PRIMARY KEY,
STREET_NAME VARCHAR(10),
COUNTY VARCHAR(10),
CITY VARCHAR(10));
我想将name
,county
和city
从更改varchar(10)
为varchar(20)
。我怎么做?
ALTER TABLE place
MODIFY( street_name VARCHAR2(20),
county VARCHAR2(20),
city VARCHAR2(20) )
请注意,我还将数据类型从VARCHAR
更改VARCHAR2
为更传统。目前两者之间没有功能差异,尽管VARCHAR
未来可能会改变行为以匹配 SQL 标准。
如果您只想更改列的类型,请使用以下内容:
ALTER TABLE <table_name> MODIFY (<column_name> <new_Type>)
in your case:
ALTER TABLE place MODIFY (street_name VARCHAR2(20),
county VARCHAR2(20),
city VARCHAR2(20))
如果您的表格有数据,您可以采取以下行动:
要重命名列,请使用以下命令:
ALTER TABLE <table_name> rename column <column_name> to <new_column_name>
ALTER TABLE table_name
MODIFY column_name datatype;
一个非常普遍的例子是在这里做同样的 -
桌子:
CREATE TABLE TABLE_NAME(
ID NUMBER PRIMARY KEY,
COLUMN_NAME NUMBER NOT NULL, -- Modify with varchar2(20) NOT NULL
.
.
.
);
将COLUMN_NAME的数据类型从NUMBER修改为VARCHAR2的步骤
脚步:
--Step 1: Add a temp column COLUMN_NAME_TEMP in table TABLE_NAME to hold data temporary
ALTER TABLE TABLE_NAME
ADD( COLUMN_NAME_TEMP varchar2(20) );
--Step 2: Update temp column COLUMN_NAME_TEMP with Old columns COLUMN_NAME data
UPDATE TABLE_NAME
SET COLUMN_NAME_TEMP = COLUMN_NAME;
--Step 3: Remove NOT NULL constrain from old columns COLUMN_NAME
ALTER TABLE TABLE_NAME MODIFY (COLUMN_NAME NULL);
--Step 4: Update old columns COLUMN_NAME data with NULL
UPDATE TABLE_NAME SET COLUMN_NAME = NULL;
--Step 5: Alter table old columns COLUMN_NAME to new data type varchar2(20)
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME varchar2(20);
--Step 6: Update old columns COLUMN_NAME with data from temp columns COLUMN_NAME_TEMP
UPDATE TABLE_NAME
SET COLUMN_NAME = COLUMN_NAME_TEMP;
--Step 7: Add NOT NULL constrain from old columns [COLUMN_NAME]
ALTER TABLE TABLE_NAME MODIFY (COLUMN_NAME NOT NULL);
--Step 8: Drop the temp column [COLUMN_NAME_TEMP]
alter table TABLE_NAME drop column COLUMN_NAME_TEMP;
如果NOT NULL约束不存在,则省略第 3 步和第 7 步
Alter table placemodify(street name varchar2(20),city varchar2(20)
如果表中已经存在一定数量的记录,则无法修改表的数据类型。
您必须先清空该列的表记录(您要修改数据类型),然后使用以下命令:
alter table place
modify ( street_name varchar2(20), country varchar2(20), city varchar2(20) );
肯定会奏效的!