我写的存储过程里要把一个表的一个字段内容赋给定义的一个变量,当内容超过800个字符时,变量的值就是(Long value)。
部分代码如下:v_sql    varchar2(2000) := '';
select tmp_text into v_sql from sd_tmp;sd_tmp表里只有一行数据。且这行数据tmp_text的内容有1076个字符。不知道为什么v_sql的结果是(Long value)。请问如何才能正确赋给变量?

解决方案 »

  1.   

    varchar2的长度指示的是字节数,如果你的数据库使用的字符集中每个字符不是1个字节,那么意味着你的2000字节可能不能存储2000字符!
      

  2.   

    这是工具问题,本身还是varchar2
      

  3.   

    看一下你的SESSION字符集是不是UTF-8的,如果是就改为结尾是16的字符试一下
      

  4.   

    我的SESSION字符集是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,这有什么问题?
      

  5.   

    普通汉字一个字就是2字节
    varchar2(2000)就是1000个汉字
    如果是utf-8的,1000个都没有,有些会是三个字节的
      

  6.   

    5楼说的已经差不多了
    这是国家字符集的问题utf-8
    utf-16一个是3个字节一个是2个字节
    发表于:2008-06-10 12:34:034楼 得分:0 
    我的SESSION字符集是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,这有什么问题? 4楼这个数据库字符集而且是客户端字符集体*.dmp都有字符集不同的区别字符集知识博大还得必须掌握
      

  7.   

    谢谢大家涌跃发表意见,这个问题我有了新的认识,varchar2类型的变量当赋于的内容超过一定长字符串时,值就表示为一个(long value),实际的内容是没错的。大家可以做这样一个实验,先定义一个变量
    var str varchar2(2000):='长度为2000的字符串......';
    再执行下面这句sql
    select :str from dual。
    结果是没错的