动态SQL的一个问题请教下

linsoo 2010-11-30 07:11:32
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呢?

我目前的做法是,前后的空格都去掉....取出来的就不是实际的值了

请问有人知道怎么做吗?
...全文
192 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanyiqiang 2010-12-05
  • 打赏
  • 举报
回复
lengthb()取字符长度,一个中文算两个字符.
pooplin 2010-12-02
  • 打赏
  • 举报
回复
length()直接取长度呀
St_Eden 2010-12-02
  • 打赏
  • 举报
回复
确实很迷茫啊
westneverwin 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 linsoo 的回复:]
这个SQLDA是Oracle自带的../precomp/public/sqlda.h
查询语句未知的查询...
[/Quote]
还没见过PROC里查询语句未知的查询,不知道了
linsoo 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 westneverwin 的回复:]

PROC?这个和动态SQL有什么关系?
要定义两个struct ,一个放数据,另一个放字符长度
你的SQLDA 里还有CHAR型的,好奇怪啊。
C/C++ code
EXEC SQL FETCH my_cur INTO :SQLDATA INDICATOR :SQLDA ;

这样写好之后SQLDA里应该就是实际长度了啊!
[/Quote]
这个SQLDA是Oracle自带的../precomp/public/sqlda.h
查询语句未知的查询...
kingkingzhu 2010-12-01
  • 打赏
  • 举报
回复
你要怎么样动态。。。
用函数包一层。。。
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;
westneverwin 2010-12-01
  • 打赏
  • 举报
回复
PROC?这个和动态SQL有什么关系?
要定义两个struct ,一个放数据,另一个放字符长度
你的SQLDA 里还有CHAR型的,好奇怪啊。
EXEC SQL	FETCH my_cur INTO 	:SQLDATA INDICATOR :SQLDA ;

这样写好之后SQLDA里应该就是实际长度了啊!
minitoy 2010-12-01
  • 打赏
  • 举报
回复
呵呵,我们说的length和你说的length不是一个东西.我们说的length是oracle内嵌的函数,你说的应该是c里求字串长度的length函数
WUNKANG 2010-12-01
  • 打赏
  • 举报
回复
直接用LENGTH了,得出包含空格在内的长度,
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 linsoo 的回复:]
对于一个VARCHAR2的字段,假如长度是10,保存的真实值如果是' 123 '(真实长度5)
那么查询得到的结果是' 123 ',这个字符串是不带'\0'的,length不能用,即使能用,得到的长度也是10,如果trim那么将得到'123',但是这不是数据库中保存的值

看来都没用过动态SQL么....
[/Quote]真没明白您的意思,你就直接拿个你遇到的问题来说明更好
baozhidie1 2010-12-01
  • 打赏
  • 举报
回复
不太懂LZ所说的动态SQL
length()如果这个用不了,可以自己写一个判断字符长度的函数呀。
还有VARCHAR2类型的字符是以/0结束的吗?
gelyon 2010-12-01
  • 打赏
  • 举报
回复
楼主说的东西我们都感到很迷茫
linsoo 2010-12-01
  • 打赏
  • 举报
回复
那么查询得到的结果是' 123 '
linsoo 2010-12-01
  • 打赏
  • 举报
回复
那么查询得到的结果是' 123 '

怎么加了颜色就被CSDN把空格吃掉了
linsoo 2010-12-01
  • 打赏
  • 举报
回复
对于一个VARCHAR2的字段,假如长度是10,保存的真实值如果是' 123 '(真实长度5)
那么查询得到的结果是' 123 ',这个字符串是不带'\0'的,length不能用,即使能用,得到的长度也是10,如果trim那么将得到'123',但是这不是数据库中保存的值

看来都没用过动态SQL么....
linsoo 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 westneverwin 的回复:]

引用 16 楼 linsoo 的回复:
这个SQLDA是Oracle自带的../precomp/public/sqlda.h
查询语句未知的查询...

还没见过PROC里查询语句未知的查询,不知道了
[/Quote]
所以叫动态SQL......
hui94781674 2010-11-30
  • 打赏
  • 举报
回复
length() 不就是求长度么 trim 一下,去除左右空格 。。
YY_MM_DD 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 linsoo 的回复:]
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 o……
[/Quote]
你目前的做法是,去掉了空格,然后求长度,你又是怎么做的呢?
现在我们只是给你不去空格求长度,不是一个道理吗?
你把意思说明白点哈
linsoo 2010-11-30
  • 打赏
  • 举报
回复
楼上各位,我说的是动态SQL......
gelyon 2010-11-30
  • 打赏
  • 举报
回复
length()
加载更多回复(2)

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧