首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检索长值的长度

检索长值的长度
EN

Stack Overflow用户
提问于 2012-02-16 01:09:22
回答 1查看 132关注 0票数 0

我在Oracle中有一个表,其中包含一个数据类型为LONG的字段。通过下面的函数,我尝试找出表中特定记录的LONG字段中存储了多少个字符。

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION Find_Length(i_nwt_id number)
RETURN NUMBER

 IS
    long_var LONG;

BEGIN
    SELECT NWT_TEXT
      INTO long_var
      FROM qf.NWT
     WHERE nwt_id=i_nwt_id;

    RETURN length(long_var);

END;

我试着这样叫它:

代码语言:javascript
复制
select nwt_id, find_length(nwt_id)leng  from nwt ;

无论如何,这个select抛出了一个异常:

代码语言:javascript
复制
Numeric or value error!

任何人都可以给我一个提示,我做错了什么?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-16 02:14:51

你的问题是当你遇到一个大于32k的大小。对于long raw,要么遵循Vincent的java存储proc解决方案,要么执行以下操作:

代码语言:javascript
复制
create global temporary table ltt(x clob)
on commit delete rows;

create or replace function length_of_long(p_tname in varchar2, p_cname in varchar2, p_rowid in rowid)
return number authid current_user
as
  pragma autonomous_transaction;
  l_length number;
begin
  execute immediate
  'insert into ltt(x)
  select to_lob(' || p_cname || ')
  from ' || p_tname || '
  where rowid = :x' using p_rowid;

  select dbms_lob.get_length(x) into l_length from ltt;

  commit;

  return l_length;
end;

并像这样使用它:

代码语言:javascript
复制
select id, length_of_long('MY_TABLE', 'LONG_COL', rowid) as len from MY_TABLE;

免责声明,前段时间我从Tom Kyte的文章中发现了这种方法,类似的方法将适用于LONG RAW,只需要将临时表作为BLOB即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9297888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档