oracle lang raw求长度,求Long raw型长度?

以下是一个得到long长度的函数(对不起, 忘记出处了, 好像是asktom)

[php]

create or replace function long_length( p_cname in varchar2,

p_tname in varchar2,

p_rowid in rowid )

return number

as

l_cursor    integer default dbms_sql.open_cursor;

l_n         number;

l_long_val  varchar2(32760);

l_long_len  number;

l_buflen    number := 32760;

l_curpos    number := 0;

begin

dbms_sql.parse( l_cursor, 'select ' || p_cname ||

' from ' || p_tname ||

' where rowid = :rid',

dbms_sql.native );

dbms_sql.bind_variable( l_cursor, ':rid', p_rowid );

dbms_sql.define_column_long(l_cursor, 1);

l_n := dbms_sql.execute(l_cursor);

if (dbms_sql.fetch_rows(l_cursor)>0)

then

loop

dbms_sql.column_value_long(l_cursor, 1, l_buflen,

l_curpos ,

l_long_val, l_long_len );

l_curpos := l_curpos + l_long_len;

exit when l_long_len = 0;

end loop;

end if;

dbms_sql.close_cursor(l_cursor);

return l_curpos;

exception

when others then

if dbms_sql.is_open(l_cursor) then

dbms_sql.close_cursor(l_cursor);

end if;

raise;

end long_length;

/

[/php]

用法:

[php]

scott@ORCL> desc test_long

名称                                      空?      类型

----------------------------------------- -------- ----------------------------

A                                         NOT NULL VARCHAR2(10)

B                                                  LONG

scott@ORCL> select A, long_length('B', 'TEST_LONG', ROWID) FROM TEST_LONG

2  /

A          LONG_LENGTH('B','TEST_LONG',ROWID)

---------- ----------------------------------

3                                        3955

scott@ORCL>

[/php]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值