@@ -5,65 +5,54 @@ CREATE OR REPLACE FUNCTION FIND_IN_SET
55 p_sep varchar2 := ' ,' )
66 RETURN NUMBER
77 IS
8- l_idx number := 0 ; -- 用于计算piv_str2中分隔符的位置
9- str varchar2 (500 ); -- 根据分隔符截取的子字符串
10- piv_str varchar2 (500 ) := piv_str2; -- 将piv_str2赋值给piv_str
11- res number := 0 ; -- 返回结果
8+ l_idx number := 0 ;
9+ str varchar2 (500 );
10+ piv_str varchar2 (500 ) := piv_str2;
11+ res number := 0 ;
1212 loopIndex number := 0 ;
1313BEGIN
14- -- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1
1514 IF instr(piv_str, p_sep, 1 ) = 0 THEN
1615 IF piv_str = piv_str1 THEN
1716 res := 1 ;
1817 END IF;
1918 ELSE
20- -- 循环按分隔符截取piv_str
2119 LOOP
2220 l_idx := instr(piv_str, p_sep);
2321 loopIndex:= loopIndex+ 1 ;
24- -- 当piv_str中还有分隔符时
2522 IF l_idx > 0 THEN
26- -- 截取第一个分隔符前的字段str
2723 str:= substr(piv_str, 1 , l_idx- 1 );
28- -- 判断 str 和piv_str1 是否相等,相等 res=1 并结束循环判断
2924 IF str = piv_str1 THEN
3025 res:= loopIndex;
3126 EXIT;
3227 END IF;
3328 piv_str := substr(piv_str, l_idx+ length(p_sep));
3429 ELSE
35- -- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1
3630 IF piv_str = piv_str1 THEN
3731 res:= loopIndex;
3832 END IF;
39- -- 无论最后是否相等,都跳出循环
4033 EXIT;
4134 END IF;
4235 END LOOP;
43- -- 结束循环
4436 END IF;
45- -- 返回res
4637 RETURN res;
4738END FIND_IN_SET;
48- /
39+
40+ --
4941
5042CREATE OR REPLACE FUNCTION "IF "(
51- p_condition BOOLEAN , -- 判断条件
52- p_true_val ANYTYPE, -- true分支返回值(任意类型)
53- p_false_val ANYTYPE -- false分支返回值(任意类型)
54- ) RETURNS ANYTYPE
43+ p_condition BOOLEAN ,
44+ p_true_val ANYTYPE,
45+ p_false_val ANYTYPE
46+ ) RETURN ANYTYPE
5547AS
5648BEGIN
57- -- 仅校验条件非空,不校验类型
5849 IF p_condition IS NULL THEN
5950 RAISE_APPLICATION_ERROR(- 20001 , ' 判断条件不能为NULL' );
6051 END IF;
6152
62- -- 核心逻辑:直接返回不同类型值
6353 IF p_condition THEN
64- RETURN p_true_val; -- 如:字符串
54+ RETURN p_true_val;
6555 ELSE
66- RETURN p_false_val; -- 如:数值
56+ RETURN p_false_val;
6757 END IF;
6858END;
69- /
0 commit comments