更改Oracle中列的数据类型

时间:2012-04-25 18:38:12

标签: oracle oracle10g oracle11g

我创建了下表

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

我想将namecountycityvarchar(10)更改为varchar(20)。我该怎么做?

6 个答案:

答案 0 :(得分:32)

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

请注意,我也将数据类型从VARCHAR更改为VARCHAR2更为常规。目前两者之间没有功能差异,但VARCHAR的行为将来可能会发生变化以符合SQL标准。

答案 1 :(得分:5)

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

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. 将新列重命名为旧列。
  5. 要重命名列,请使用以下内容:

    ALTER TABLE <table_name> rename column <column_name> to <new_column_name>
    

答案 2 :(得分:0)

Oracle 10G及更高版本

ALTER TABLE table_name
MODIFY column_name datatype;

答案 3 :(得分: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 约束不存在,则省略 step-3 和 step-7

答案 4 :(得分:-1)

Alter table placemodify(street name varchar2(20),city varchar2(20)

答案 5 :(得分:-2)

如果表格中已有一些记录,则无法修改表格的数据类型。

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

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

肯定会起作用!