昨天把瑞星防火墙升级到2009后,今天就出问题了。
用一会儿后整个windows就死掉了,点"任务管理器"也没有反应。只好硬关机,但重启后症状依旧。
无奈之下尝试卸载瑞星防火墙2009,卸载的过程中死了一次,硬关机重启后再次卸载成功。
但是卸载完后发现本地网卡、无线网卡和蓝牙均不能使用,后发现是瑞星在我的"设备管理器"的"网络适配器"下面针对本地网卡、无线网卡和蓝牙都安装了一个瑞星自己的驱动程序,而且这些驱动程序现在是处在异常状态(前面有黄色惊叹号),更要命的是这些处于异常状态的驱动程序无法卸载。无奈之下卸载掉正常的本地网卡、无线网卡和蓝牙的驱动,卸载完毕后前面有黄色惊叹号的瑞星的那些驱动也随之消失,但始终还有一个针对wan口的瑞星驱动无法卸载。
我知道瑞星2009很烂,所以我的防火墙一直还是2008,但昨天手欠,点了一下升级,恶梦就降临了!
于是心乱如麻的开始了重装的过程。
在重装的过程中,有同事问我问题:说他的一个存储过程,导入一批数据,这一批数据中会往某个表里插入10几条特殊数据,在插入了这10几条记录的过程中写错误日志写了4000多条,而且错误内容全部是"ORA-06502: PL/SQL: numeric or value error",他问我如何解决上述问题?
这里报错是非常奇怪的,因为oracle报错ORA-06502的时候通常会在报错的最后写错误的具体原因,如:
ORA -06502 : PL/SQL: numeric or value error: character string buffer too small
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
我注意到上述报错后面没有跟具体的错误原因。
我在我整个人的状态很混乱的情况下开始了定位错误的过程,最后被我发现造成上述错误的原因有3点,这3点我就不细说了,我这里只说为什么oracle在报错ORA-06502的时候,后面并没有跟具体的错误原因。
我们先来看一个报错ORA-06502,但是后面会跟具体的错误原因的例子:
SQL> create table t1(id number,name varchar2(10));
Table created
SQL> create or replace procedure P_TEST is
2 vc_name varchar2(10);
3 begin
4 vc_name := '12345678910';
5 execute immediate 'insert into t1(id,name) values(null,:1)' using vc_name;
6
7 commit;
8 end P_TEST;
9 /
Procedure created
SQL> exec p_test;
begin p_test; end;
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "IPRA.P_TEST", line 4
ORA-06512: at line 1
我们再来看一个报错ORA-06502,但是后面不跟具体的错误原因的例子:
SQL> create or replace package PCK_TEST is
2 type typ_t1 is record
3 (
4 id t1.id%type,
5 name t1.name%type,
6 n_count number(1)
7 );
8 end PCK_TEST;
9 /
Package created
SQL> create or replace procedure P_TEST is
2 rec_t1 pck_test.typ_t1;
3 begin
4 for i in 1 .. rec_t1.n_count loop
5 execute immediate 'insert into t1(id,name) values(:1,:2)' using rec_t1.id,rec_t1.name;
6 end loop;
7
8 commit;
9 end P_TEST;
10 /
Procedure created
SQL> exec p_test;
begin p_test; end;
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "IPRA.P_TEST", line 4
ORA-06512: at line 1
这里我们可以看到很清晰的看到,为什么第二次报错ORA-06502的时候并没有跟具体的错误原因----因为这里我们尝试使用rec_t1的n_count,但这里rec_t1并没有初始化。
really sorry for wasting your time on my unnecessary error.
围观