하단에 토큰 길이를 구하는 함수입니다. (--------) 이거 아래.
select sf_acm_token_count('|201|301|601|801|901|121|201' , '|') from dual;
이 쿼리를 날리면 7개 정상으로 리턴해줍니다.
select sf_acm_token_count('' , '|') from dual
이렇게 널값을 넘기면 0 값 리턴하라고 함수처리해 준거 같은데...
마치 무한루프 도는거마냥 바로 안나오고... 계속 진행시간이 나옵니다. (토드에서..)
분명히 널값이나 '' 처리 해주었는데..
그 부분을 인식 못하는거 같아요.
무엇이 잘못되었는지 도움좀...
ㅠㅠ
-------------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION ACCT.sf_acm_token_count (
arg_val varchar2, -- 대상문자열
arg_token varchar2 -- 토큰문자
)
RETURN integer IS
li_idx integer := 0;
li_end integer := 1;
li_start integer := 1;
li_total integer := 0;
str_flag varchar2(1) := 'S';
BEGIN
if arg_val = null or arg_val = '' then
return 0;
end if;
li_total := length(arg_val);
if li_total = 0 then
return li_total;
end if;
while str_flag = 'S' loop
li_end := instr(arg_val, arg_token, li_start);
if li_end <> 1 then
if li_end = 0 then
li_end := li_total + 1;
str_flag := 'E';
if substr(arg_val,length(arg_val),'1') = '|' then
li_idx := li_idx - 1;
end if;
end if;
li_idx := li_idx + 1;
end if;
li_start := li_end + 1;
end loop;
RETURN li_idx;
EXCEPTION
WHEN OTHERS THEN
return 0;
END sf_acm_token_count;
/