更改列数据类型

问题描述 投票:0回答:1

如何将一列数字更改为数字列表。

在myTable中,m_no是一个整数。现在我希望将 m_no 列更改为整数列表,而不丢失当前存储的值。

CREATE TABLE myTable (
    m_id,
    m_no
);
oracle-sqldeveloper
1个回答
0
投票

这不是一项简单的任务,因为如果该列不为空(而您的列不为空),则您无法更改该列的数据类型。

此外,这取决于你所谓的“整数列表”;一个简单的选项是它是否表示具有逗号分隔整数值的字符串。基本上,是一个

varchar2
数据类型列。或者,您是想使用嵌套表吗?

假设它是一个简单的字符串,这是一个演练:

带有一些值的原始表:

SQL> create table mytable (m_id number, m_no number);

Table created.

SQL> insert into mytable values (1, 100);

1 row created.

如果您只是尝试更改

m_no
列的数据类型,它将不起作用:

SQL> alter table mytable modify m_no varchar2(50);
alter table mytable modify m_no varchar2(50)
                           *
ERROR at line 1:
ORA-01439: column to be modified must be empty to change datatype

因此,添加一个新列(用于存储“原始”值):

SQL> alter table mytable add m_no_old number;

Table altered.

SQL> update mytable set m_no_old = m_no;

1 row updated.

清空原来的列:

SQL> update mytable set m_no = null;

1 row updated.

更改其数据类型:

SQL> alter table mytable modify m_no varchar2(50);

Table altered.

将原始值移回:

SQL> update mytable set m_no = m_no_old;

1 row updated.

删除新添加的列:

SQL> alter table mytable drop column m_no_old;

Table altered.

添加更多整数到其中:

SQL> update mytable set m_no = m_no || ', 200, 300';

1 row updated.

结果:

SQL> select * from mytable;

      M_ID M_NO
---------- --------------------------------------------------
         1 100, 200, 300
© www.soinside.com 2019 - 2024. All rights reserved.