2016-12-16 139 views
-2

直到今天,我们使用在Varchar列中输入数值,以便Oracle将该varchar字段转换为数字字段。 现在,当我们试图插入字符值时,它会抛出ORA-01722(无效号码)。Oracle将Varchar字段转换为数字如何将其转换回Varchar

任何人都可以帮我把它转换回varchar字段吗?

+0

发布表描述和抛出异常的查询 – GurV

+0

你是什么意思* Oracle将该varchar字段转换为数字字段*? – GurV

+1

欢迎来到SO。请阅读[问]并发布相关细节。谢谢。 – OldProgrammer

回答

0

评论者是正确的:数据库不会自行更改列类型。通常,您必须创建一个新列,将旧数据复制到新列,删除原始列并重命名新列。

drop table deleteme_table; 

-- zippy s/b varchar2(30), not integer 
CREATE TABLE deleteme_table 
(
    adate  DATE 
    , zippy INTEGER 
); 

-- Add the correct type to the table as a new column 
ALTER TABLE deleteme_table 
    ADD (tempcol VARCHAR2 (30)); 

-- Copy the old values to the new column 
UPDATE deleteme_table 
    SET tempcol = zippy; 

-- Get rid of the original column 
ALTER TABLE deleteme_table 
    DROP COLUMN zippy; 

-- Rename to original column name 
alter table deleteme_table rename column tempcol to zippy;