我现在有一张表A,结构如下:
Name Null? Type
----------------------------------------- -------- -----------------
DOCID NOT NULL VARCHAR2(200)
CODENO NOT NULL VARCHAR2(200)
REPNO NOT NULL VARCHAR2(200)
DOCNAME VARCHAR2(200)
DEPTNAME VARCHAR2(200)
AMOUNT NUMBER(10,2)
SCALE NUMBER(10,2)
BOSNO VARCHAR2(200)
MARK VARCHAR2(200)
SERIAL NUMBER(10)
我现在希望改codeno 为数值型number,由于表里面有数据,不能修改表,现在我
create table B as select * from A; 将表 A 连同结构复制到表B,然后
delete from A;
alter table A modify(codeno number(5));修改成功
然后将B表数据导回来,就出错了,我的语句是:
insert into A(docid,codeno,repno,docname,deptname,amount,scale,bosno,mark,serial) select docid,to_number(codeno),repno,docname,deptname,amount,scale,bosno,mark,serial from B
出错:光标停在 to_number 前面
ERROR at line 1:
ORA-01722: invalid number
怎么办??我觉得应该是没问题的,可偏偏出错
^_^>>select * from test;
ID K VALUE
---------- - ----------
1 a 102930
^_^>>truncate table test;
表已截掉。
^_^>>desc test1;
名称 空? 类型
----------------------------------------------------- -------- ------------------------------------
ID NUMBER(4)
KIND CHAR(1)
VALUE VARCHAR2(10)
^_^>>select * from test1;
ID K VALUE
---------- - ----------
1 a 102930
^_^>>update test1 set value=12345;
已更新 1 行。
^_^>>select * from test1;
ID K VALUE
---------- - ----------
1 a 12345
^_^>>alter table test modify(value number(5));
表已更改。
^_^>>insert into test(id,kind,value) select id,kind,to_number(value) from test1;
已创建 1 行。
^_^>>select * from test;
ID K VALUE
---------- - ----------
1 a 12345
select max(codeno),min(codeno) from a;看看有没有非法字符
select codeno-1 from b;也可以,做法类以,也要进行全表搜索.
给你以下一个例子:
SQL> set serveroutput on
SQL> declare
2 a varchar2(10):=111;
3 b number:=111;
4 begin
5 a:=b;
6 dbms_output.put_line(隐式转换);
7 exception
8 when others then
9 dbms_output.put_line(出错);
10 end;
11 /
隐式转换
PL/SQL procedure successfully completed