17,090
社区成员
发帖
与我相关
我的任务
分享
CREATE OR REPLACE FUNCTION getLoopStr(x_id IN NUMBER) RETURN VARCHAR2
IS
vc_addFlag VARCHAR2(1) := '+';
vn_str VARCHAR2(100);
vn_str2 VARCHAR2(100);
ret_str VARCHAR2(100);
BEGIN
SELECT MAX(col1)
INTO vn_str
FROM test1
WHERE id = x_id;
IF vn_str IS NULL THEN
RETURN '(' || x_id || ')';
ELSE
vn_str2 := vn_str || vc_addFlag;
FOR i IN 0..length(vn_str) - length(REPLACE(vn_str, vc_addFlag)) LOOP
ret_str := ret_str || vc_addFlag || getLoopStr(substr(vn_str2, 1, instr(vn_str2, vc_addFlag) - 1)) ;
vn_str2 := substr(vn_str2, instr(vn_str2, vc_addFlag) + 1 );
END LOOP;
END IF;
RETURN substr(ret_str, 2);
END getLoopStr;
**********************************************
SELECT getloopstr(1), getloopstr(2) FROM dual
-------------------------------------------
(3)+(4)+(6)+(10) (3)+(4)