select decode
(
length('1,2,3')-length('1,3'),
length
(
translate
(
replace('1,2,3',','),
replace('1,3',','),
lpad(' ',length(replace('1,3',',')),' ')
)
),
0,
1
)
from dual
(
length('1,2,3')-length('1,3'),
length
(
translate
(
replace('1,2,3',','),
replace('1,3',','),
lpad(' ',length(replace('1,3',',')),' ')
)
),
0,
1
)
from dual
substr()
instr()
v_srcIDList VARCHAR2, --形如:1,3
v_dstIDList VARCHAR2 --形如:1,2,3
)
return NUMBER
IS
str varchar2(100);
v_Result NUMBER;
BEGIN
v_Result := 0;
BEGIN
------------
str:='
select decode
(
length(:1)-length(:2),
length
(
translate
(
replace(:1,:3),
replace(:2,:3),
lpad(:4,length(replace(:2,:3)),:4)
)
),
0,
1
)
from dual'; execute immediate str into v_Result using
a,b,a,',',b,',',' ',b,',',' ';
------------v_Result := 1; --谁能帮我实现这部分代码,谢谢!
EXCEPTION
WHEN OTHERS THEN
v_Result := 0;
END;
return v_Result;
END F_InIDList;
v_num_b number(1);
for n1 in 1..v_num_src loop
v_num_b=instr(v_dstIDList,substr(v_srcIDList,n1,1),1,1);
if v_num_b =0 then
exit;
end loop;
to CodeMagic:
谢谢!
你的代码编译不通过啊正在试wylwyl1130的代码
谢谢!不过你可能理解错我的意思了如
v_srcIDList字符串值为:12,145 它包含12和145两个数值
v_dstIDList字符串值为:12,14566,145 它包含12、14566、145三个数值
函数要实现的功能就是判断v_srcIDList包含的数值是否都在v_dstIDList包含的数值里面
for i=0 to ubound(ss)
if instr(v_des(srcIDList,ss(i))=0 then
return 0
next
呵呵只是不知道oracle中怎么写,相应的函数和语法怎么写。
对了,知道相应的函数跟语法哪里有参考吗?
谢谢帮忙顶一把函数的参考,好像www.experts-change.com上可以找到还不错的,网址不知道有没有记错,现在在网吧,等回去找一下
v_src VARCHAR2(1000);
v_dst VARCHAR2(1000); FUNCTION IfContain
(
i_src IN VARCHAR2 ,
i_dst IN VARCHAR2
)
RETURN BOOLEAN
IS
v_ret BOOLEAN; TYPE t_array IS VARRAY(100) OF VARCHAR2(100); v_arr_src t_array := t_array('');
v_arr_dst t_array := t_array('');
v_found BOOLEAN;
FUNCTION StrToArray(i_str IN VARCHAR2) RETURN t_array
IS
v_lst_pos NUMBER;
v_cur_pos NUMBER;
v_cnt NUMBER;
v_arr t_array := t_array('');
BEGIN
v_cur_pos := 1;
v_lst_pos :=1 ;
v_cnt := 1;
LOOP
v_cur_pos := INSTR(i_str,',' , 1,v_cnt ) ;
DBMS_OUTPUT.PUT_LINE ( 'v_cur_pos=' || v_cur_pos );
IF v_cur_pos <= 0 THEN
v_cur_pos := LENGTH(i_str);
v_arr(v_cnt ) := SUBSTR( i_str , v_lst_pos , v_cur_pos - v_lst_pos + 1 );
EXIT;
ELSE
v_arr.EXTEND;
v_arr(v_cnt ) := SUBSTR( i_str , v_lst_pos , v_cur_pos - v_lst_pos );
v_lst_pos := v_cur_pos + 1 ;
END IF;
v_cnt := v_cnt + 1;
END LOOP;
RETURN v_arr;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
RETURN v_arr;
END StrToArray;
BEGIN v_arr_src := StrToArray(i_src);
v_arr_dst := StrToArray(i_dst);
v_ret := TRUE;
<<loop2>>
FOR i IN 1..v_arr_src.COUNT LOOP
v_found := FALSE;
<<loop1>>
FOR j IN 1..v_arr_dst.COUNT LOOP
IF v_arr_src(i) = v_arr_dst(j) THEN
v_found := TRUE;
EXIT loop1 ;
ELSE
END IF;
END LOOP;
IF NOT v_found THEN
v_ret := FALSE;
EXIT loop2;
END IF;
END LOOP;
RETURN v_ret;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('error=*' || SQLERRM || '*');
RETURN v_ret ;
END IfContain;BEGIN v_src := 'a';
v_dst := 'a'; IF IfContain(v_src,v_dst) THEN
DBMS_OUTPUT.PUT_LINE('YES');
ELSE
DBMS_OUTPUT.PUT_LINE('NO');
END IF;
END;