公司的oracle,在遇到这种错误的时候,是没有报出是哪一列过大的。但是我在用户现场,却看到他们的数据库可以报出是哪一列过大。请问高手们,是数据库版本问题还是数据库的配置问题,谢谢!告诉我是哪个版本或者如何配置,谢谢!

解决方案 »

  1.   

    -- 会提示的
    [email protected]> desc t;
     名称                                                                                      是否为空? 类型
     ----------------------------------------------------------------------------------------- -------- ----------------------------
     ID                                                                                                 NUMBER(18)
     RANDOMSTR                                                                                          VARCHAR2(20)
     CDATE                                                                                              [email protected]> insert into t(id,randomstr,cdate) values(0,'ldjoeieeieiieieioeifjeofjepofjeo',sysdate);
    insert into t(id,randomstr,cdate) values(0,'ldjoeieeieiieieioeifjeofjepofjeo',sysdate)
                                               *
    第 1 行出现错误:
    ORA-12899: 列 "SCOTT"."T"."RANDOMSTR" 的值太大 (实际值: 32, 最大值: 20)
      

  2.   


    不行啊,大哥
    SQL> SQL> insert into b(a,b,c) values('1','ldjoeieeieiieieioeifjeofjepofjeo','3');
     
    insert into b(a,b,c) values('1','ldjoeieeieiieieioeifjeofjepofjeo','3')
     
    ORA-01401: inserted value too large for column
    这个只是在第二列下面有下划线我是用存储过程插入的,而且为什么我这里的错误号和你的还不一样的
      

  3.   

    -- 你的数据库是什么版本?
    [email protected]> select * from v$version where rownum<3;BANNER
    ----------------------------------------------------------------------------------
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
    PL/SQL Release 10.2.0.1.0 - Production
      

  4.   

    http://hi.csdn.net/attachment/201104/28/1237198_1303967907EeKg.jpg
      

  5.   

    SQL> select * from v$version where rownum<3;
     
    BANNER
    ----------------------------------------------------------------
    Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
    PL/SQL Release 9.2.0.8.0 - Production
    不会是版本问题吧?
      

  6.   

    我现在用了个11G的版本试,报错如下
    insert into b(a,b,c) values('1','ldjoeieeieiieieioeifjeofjepofjeo','3');
     
    insert into b(a,b,c) values('1','ldjoeieeieiieieioeifjeofjepofjeo','3')
     
    ORA-12899: 列 "PCS_GXZFBA"."B"."B" 的值太大 (实际值: 32, 最大值: 30)
    难道是因为9i不支持这样的报错吗?
      

  7.   

    或者说9i报错没有把哪一列过大告诉开发人员吗?java.sql.Type: -1, In Parameter: true, Parameter: 3.33333325E9, java.sql.Type: 7] - ORA-01401: inserted value too large for column ORA-06512: at "GDJZ3Q_DZF.S_B_DZF_BMDXQZXP", line 52 ORA-06512: at line 1  
      

  8.   

    java.sql.Type: -1, In Parameter: true, Parameter: 3.33333325E9, java.sql.Type: 7] - ORA-01401: inserted value too large for column ORA-06512: at "GDJZ3Q_DZF.S_B_DZF_BMDXQZXP", line 52 ORA-06512: at line 1   -- 从你的报错信息可以看出,你的应用程序应该是用的java调用存储过程插入表记录!-- 其存储过程的名字是:GDJZ3Q_DZF.S_B_DZF_BMDXQZXP
    -- 其中:GDJZ3Q_DZF应该是你的数据库用户名,S_B_DZF_BMDXQZXP应该是存储过程的名字,
    -- 错误位置位于这个存储过程的第52行!--所以:你可以用下面的语句:
    set long 50000;select dbms_metadata.get_ddl('PROCEDURE','S_B_DZF_BMDXQZXP','GDJZ3Q_DZF') from dual;-- 根据上面语句的结果去查看其第52行代码是什么!
    --再去进行分析!
      

  9.   

    -- 或者以 GDJZ3Q_DZF 用户登录,执行下面的语句(查看存储过程的某一行代码)
     select * from user_source
     where name='S_B_DZF_BMDXQZXP' and line=52;
      

  10.   


    存储过程我是知道是那个,那一行我也知道是怎么样的,那一行就是一条insert语句,找到那条语句也不知道是哪一列过大啊。我本来的意思就是这个。因为我们的应用都是调用存储过程插入的,每次遇到这样的错误,要找到哪个字段,都要一个一个来试,这样很费劲。有一次我去现场,发现用户那里的报错信息是可以知道是哪个字段的,所以我感觉很奇怪,为什么我们公司的就没有直接报出字段来?所以我有点怀疑是数据库版本问题,因为现场用户好像是用的10G,而我们公司一直用9i的。
      

  11.   

    是动态执行的SQL就报不了
    单独的insert 语句 就会报出哪个列