Sql 如何在oracle中将数字(7,2)更改为varchar?

Sql 如何在oracle中将数字(7,2)更改为varchar?,sql,oracle,Sql,Oracle,我正在使用Oracle 10g。我想附加到'sal'列中的所有值。为了实现这一点,我首先尝试将'sal'列的数据类型从numeric更改为varchar,但出现以下错误 我做错了什么?你应该使用modify关键字而不是第二个alter 修改表列数据类型时,需要使用modify关键字 当然,您必须处理现有的列数据。修改表列数据类型时,可能需要导出行,重新定义表,然后重新导入数据 在这种情况下,您需要按照以下步骤更改列数据类型: 在表的末尾创建新列。 运行更新以填充新表列 删除旧表列 将新列重新命

我正在使用Oracle 10g。我想附加到'sal'列中的所有值。为了实现这一点,我首先尝试将'sal'列的数据类型从numeric更改为varchar,但出现以下错误

我做错了什么?

你应该使用modify关键字而不是第二个alter

修改表列数据类型时,需要使用modify关键字

当然,您必须处理现有的列数据。修改表列数据类型时,可能需要导出行,重新定义表,然后重新导入数据

在这种情况下,您需要按照以下步骤更改列数据类型:

在表的末尾创建新列。 运行更新以填充新表列 删除旧表列 将新列重新命名为原始列名
通过附加一段字符串来获取一个非常好的数字并毁掉其他用户,这似乎不是一个明智的想法。 直接或通过视图将字符串添加到select上

比如:

SQL> create view emp_horked 
     as 
     select ename, sal, sal || '#' hash, to_char(SAL,'9999.99') || '#' sal_padded  
       from emp;

View created.

SQL> select * from emp_horked where rownum < 5;

ENAME             SAL HASH                                      SAL_PADDE
---------- ---------- ----------------------------------------- ---------
SMITH             800 800#                                        800.00#
ALLEN            1600 1600#                                      1600.00#
WARD             1250 1250#                                      1250.00#
JONES            2975 2975#                                      2975.00#

对于to_char

这是有效的,但在第5行:ORA-01439:要修改的列中给出错误“error”必须为空才能更改数据类型“@严重:请参阅编辑。出现错误是因为该表中已有数据。to_charSAL,“9999.99”| | sal| u填充的目的是什么?我的意思是最后一列的用途是什么?最后一列尝试解决您的请求:我想附加到“sal”列中的所有值。我想我误解了这个问题。按照我的阅读方式,您希望将其更改为varchar,以便向其中添加字符。这似乎很奇怪,似乎会降低数据的有用性。现在我想你选择了一个不幸的例子。我曾经有一位客户,他有6字节的数字订单号,希望在保留6列的同时存储更多的值。所以他们想改为varchar,以便能够将alpha字符添加到序列中。这似乎是合理的。
SQL> create view emp_horked 
     as 
     select ename, sal, sal || '#' hash, to_char(SAL,'9999.99') || '#' sal_padded  
       from emp;

View created.

SQL> select * from emp_horked where rownum < 5;

ENAME             SAL HASH                                      SAL_PADDE
---------- ---------- ----------------------------------------- ---------
SMITH             800 800#                                        800.00#
ALLEN            1600 1600#                                      1600.00#
WARD             1250 1250#                                      1250.00#
JONES            2975 2975#                                      2975.00#