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呢?我目前的做法是,前后的空格都去掉....取出来的就不是实际的值了请问有人知道怎么做吗?
/* 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呢?我目前的做法是,前后的空格都去掉....取出来的就不是实际的值了请问有人知道怎么做吗?
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
那么查询得到的结果是' 123 ',这个字符串是不带'\0'的,length不能用,即使能用,得到的长度也是10,如果trim那么将得到'123',但是这不是数据库中保存的值看来都没用过动态SQL么....
length()如果这个用不了,可以自己写一个判断字符长度的函数呀。
还有VARCHAR2类型的字符是以/0结束的吗?
要定义两个struct ,一个放数据,另一个放字符长度
你的SQLDA 里还有CHAR型的,好奇怪啊。
EXEC SQL FETCH my_cur INTO :SQLDATA INDICATOR :SQLDA ;
这样写好之后SQLDA里应该就是实际长度了啊!
用函数包一层
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;
查询语句未知的查询...