2012-02-15 4 views
0

데이터 유형이 LONG 인 필드가 포함 된 Oracle 테이블이 있습니다. 다음 함수를 사용하여 테이블의 특정 레코드에 대해이 LONG 필드에 저장된 문자 수를 확인하려고합니다.긴 값의 길이 검색

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; 

나는 다음과 같이 호출하려고 :

select nwt_id, find_length(nwt_id)leng from nwt ; 

어쨌든이 선택은 나에게 예외를 throw :

Numeric or value error! 

누군가가 나에게 내가 잘못하고있는 중이 야 무슨 힌트를 줄 수 있을까?

감사합니다.

+1

중복 가능성이 있음 http://stackoverflow.com/questions/5497238/get-the-length-of-a-long-raw – Ben

답변

1

문제는 크기가 32k를 초과했을 때입니다. 어느 긴 원시에 대한 빈센트의 자바 저장 프로 시저 솔루션을 따르거나이 수행

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; 

을 그리고 다음과 같이 사용 :

select id, length_of_long('MY_TABLE', 'LONG_COL', rowid) as len from MY_TABLE; 

부인, 내가 언젠가 전에 톰 카이트 기사에서이 방법을 발견, 비슷한 뜻 LONG RAW에 대한 작업, 그냥 BLOB로 임시 테이블이 필요합니다.

+0

'how_long' 함수를 호출해야합니다! 그것은 좋은 해결책입니다. 끔찍하게 둥글게 보인다. 그러나 '긴'을 가진 모든 것이 그 것이다. – Ben

+0

@Ben 하하, 너무 재미있어 :-) – tbone

관련 문제