22

我创建了下表

CREATE TABLE PLACE(
  POSTCODE VARCHAR(10) PRIMARY KEY,
  STREET_NAME VARCHAR(10),
  COUNTY VARCHAR(10),
  CITY VARCHAR(10));  

我想将name,countycity从更改varchar(10)varchar(20)。我怎么做?

4

6 回答 6

41
ALTER TABLE place
  MODIFY( street_name VARCHAR2(20),
          county      VARCHAR2(20),
          city        VARCHAR2(20) )

请注意,我还将数据类型从VARCHAR更改VARCHAR2为更传统。目前两者之间没有功能差异,尽管VARCHAR未来可能会改变行为以匹配 SQL 标准。

于 2012-04-25T18:42:37.910 回答
8

如果您只想更改列的类型,请使用以下内容:

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))

如果您的表格有数据,您可以采取以下行动:

  1. 将具有新类型的列添加到表中。
  2. 将数据从旧列复制到新列。
  3. 删除旧列。
  4. 将新列重命名为旧列。

要重命名列,请使用以下命令:

ALTER TABLE <table_name> rename column <column_name> to <new_column_name>
于 2015-07-07T07:44:37.547 回答
0

Oracle 10G 及更高版本

ALTER TABLE table_name
MODIFY column_name datatype;
于 2020-03-23T17:56:05.280 回答
0

一个非常普遍的例子是在这里做同样的 -

桌子:

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 步

于 2021-03-01T12:25:01.807 回答
-1
Alter table placemodify(street name varchar2(20),city varchar2(20)
于 2017-10-15T20:02:45.317 回答
-3

如果表中已经存在一定数量的记录,则无法修改表的数据类型。

您必须先清空该列的表记录(您要修改数据类型),然后使用以下命令:

alter table place
modify ( street_name varchar2(20), country varchar2(20), city varchar2(20) );

肯定会奏效的!

于 2015-06-12T07:00:04.643 回答