CURSOR如下:CURSOR u_TEST IS                           
        SELECT
            ID,                                   
            NAME,                                    
            MAX(WEIGHT) WEIGHT
        FROM
            TEST_TABLE
        WHERE
            WEIGHT<= XXX
        GROUP BY
            ID,
            NAME;
r_TEST_Rec_Row  u_TEST%ROWTYPE;TEST_TABLE表结构如下:
ID VARCHAR2(3),                                   
NAME VARCHAR2(20),                                            
WEIGHT CHAR(6).在LOOP的时候执行FETCH u_TEST INTO r_TEST_Rec_Row ;现在出现一件奇怪的事,用DBMS_OUTPUT.PUT_LINE打印r_TEST_Rec_Row.WEIGHT长度(LENGTH)的时候,居然显示的是4000位,而打印ID或者NAME长度的时候,都是跟原表中的一致,请问各位这是什么原因,该如何解决。

解决方案 »

  1.   

    你的代码呢,没道理啊.SQL> select * from test_table;
     
    ID  NAME                 WEIGHT
    --- -------------------- ------
    1   John                 65kg
     
    SQL> 
    SQL> create or replace procedure proc_test_length
      2  as
      3  CURSOR u_TEST IS
      4    SELECT
      5    ID,
      6    NAME,
      7    max(WEIGHT) WEIGHT
      8    FROM
      9    TEST_TABLE
     10    group by id,name;
     11  r_TEST_Rec_Row u_TEST%ROWTYPE;
     12  begin
     13   open u_test;
     14   fetch u_test into r_TEST_Rec_Row;
     15    dbms_output.put_line(length(r_TEST_Rec_Row.Weight));
     16   close u_test;
     17  
     18  end;
     19  /
     
    Procedure created
     
    SQL> set serveroutput on
    SQL> exec proc_test_length;
     
    6
     
    PL/SQL procedure successfully completed
     
    SQL> 
      

  2.   

     CURSOR u_TEST IS   
      SELECT
      ID,   
      NAME,   
      MAX(WEIGHT) WEIGHT
      FROM
      TEST_TABLE
      WHERE
      WEIGHT<= XXX
      GROUP BY
      ID,
      NAME;
     r_TEST_Rec_Row u_TEST%ROWTYPE;BEGIN
             OPEN  u_TEST ;                               
             FETCH u_TEST INTO r_TEST_Rec_Row ;。
             DBMS_OUTPUT.PUT_LINE(length(r_TEST_Rec_Row.Weight));打出来的结果:
    4000
      

  3.   

    不应该啊! 你r_TEST_Rec_Row.Weight就获取到cusor的weight值,而length()就是去weight值的长度,然后打印出来,没什么问题啊
    不知道你那里咋会打印出4000
      

  4.   

    原因貌似找到了,是字符集的问题,用的是日文操作系统,ORACLE_HOME的NLS_LANG值为JAPANESE_JAPAN.JA16SJIS,换到中文XP下,就没有这个问题了,谢谢各位