struct SQLDA {
  /* ub4    */ int        N; /* Descriptor size in number of entries        */
  /* text** */ char     **V; /* Ptr to Arr of addresses of main variables   */
  /* ub4*   */ int       *L; /* Ptr to Arr of lengths of buffers            */
  /* sb2*   */ short     *T; /* Ptr to Arr of types of buffers              */
  /* sb2**  */ short    **I; /* Ptr to Arr of addresses of indicator vars   */
  /* sb4    */ int        F; /* Number of variables found by DESCRIBE       */
  /* text** */ char     **S; /* Ptr to Arr of variable name pointers        */
  /* ub2*   */ short     *M; /* Ptr to Arr of max lengths of var. names     */
  /* ub2*   */ short     *C; /* Ptr to Arr of current lengths of var. names */
  /* text** */ char     **X; /* Ptr to Arr of ind. var. name pointers       */
  /* ub2*   */ short     *Y; /* Ptr to Arr of max lengths of ind. var. names */
  /* ub2*   */ short     *Z; /* Ptr to Arr of cur lengths of ind. var. names */
  };这个结构体里没有字段的当前长度值,只有L是最大长度值,比如Varchar2(255),那么返回的L=255了,但是如果这个字段只保存了' ab '这样的字符,如何知道这时候的实际长度4呢?我目前的做法是,前后的空格都去掉....取出来的就不是实际的值了请问有人知道怎么做吗?

解决方案 »

  1.   

    length(' ab ')不就是取字串长度的吗?
      

  2.   

    --没明白楼主的意思
    SQL> select length('  ab') from dual;LENGTH('AB')
    ------------
               4
    SQL> select length(trim('  ab')),length(trim(' ab ')) from dual;LENGTH(TRIM('AB')) LENGTH(TRIM('AB'))
    ------------------ ------------------
                     2                  2
      

  3.   

    楼上各位,我说的是动态SQL......
      

  4.   

    length() 不就是求长度么 trim 一下,去除左右空格 。。
      

  5.   

    对于一个VARCHAR2的字段,假如长度是10,保存的真实值如果是' 123 '(真实长度5)
    那么查询得到的结果是' 123      ',这个字符串是不带'\0'的,length不能用,即使能用,得到的长度也是10,如果trim那么将得到'123',但是这不是数据库中保存的值看来都没用过动态SQL么....
      

  6.   

    那么查询得到的结果是' 123      '怎么加了颜色就被CSDN把空格吃掉了
      

  7.   

    不太懂LZ所说的动态SQL
    length()如果这个用不了,可以自己写一个判断字符长度的函数呀。
    还有VARCHAR2类型的字符是以/0结束的吗?
      

  8.   

    直接用LENGTH了,得出包含空格在内的长度,
      

  9.   

    呵呵,我们说的length和你说的length不是一个东西.我们说的length是oracle内嵌的函数,你说的应该是c里求字串长度的length函数
      

  10.   

    PROC?这个和动态SQL有什么关系?
    要定义两个struct ,一个放数据,另一个放字符长度
    你的SQLDA 里还有CHAR型的,好奇怪啊。
    EXEC SQL FETCH my_cur INTO  :SQLDATA INDICATOR :SQLDA ;
    这样写好之后SQLDA里应该就是实际长度了啊!
      

  11.   

    你要怎么样动态
    用函数包一层
    create or replace function uf_test(v_str in varchar2) return number is
      result number;
    begin
      result := length(v_str);
      /*  result := lengthb(v_str);*/
      return result;
    end;select uf_test('ab') from dual;
      

  12.   

    这个SQLDA是Oracle自带的../precomp/public/sqlda.h
    查询语句未知的查询...
      

  13.   

    还没见过PROC里查询语句未知的查询,不知道了
      

  14.   

    lengthb()取字符长度,一个中文算两个字符.