BEGIN
-- Used to control whether the loop ends
DECLARE DONE INT DEFAULT -1;
-- 变量声明
DECLARE PARAM_OUT VARCHAR(512) DEFAULT '';
DECLARE VAR_STR VARCHAR(512) DEFAULT '';
DECLARE VAR_STR_NEW VARCHAR(512) DEFAULT '';
DECLARE VAR_SPLIT_STR VARCHAR(512) DEFAULT '';
DECLARE VAR_SPLIT_SYMBOL VARCHAR(512) DEFAULT '';
-- Record the position where a symbol appeared in the last string
DECLARE VAR_LOG_SYMBOL_INDEX INTEGER(12) DEFAULT 0;
-- Record the string truncation start, end and character occurrence position
DECLARE VAR_STR_INDEX_START INTEGER(12) DEFAULT 0;
DECLARE VAR_STR_INDEX_END INTEGER(12 ) DEFAULT 0;
DECLARE VAR_STR_SYMBOL_INDEX INTEGER(12) DEFAULT 0;
-- Record the start, end and character occurrence position of string truncation after each update
DECLARE VAR_STR_NEW_INDEX_START INTEGER(12) DEFAULT 0;
DECLARE VAR_STR_NEW_INDEX_END INTEGER(12) DEFAULT 0;
DECLARE VAR_STR_NEW_SYMBOL_INDEX INTEGER(12) DEFAULT 0;
-- Set the first position of the character in the string
SET VAR_STR_SYMBOL_INDEX = INSTR(SPLIT_STR, SPLIT_SYMBOL);
-- If the symbol exists in the string, traverse the data
IF VAR_STR_SYMBOL_INDEX <> 0 THEN
-- Initialize the first string interception position
SET PARAM_OUT = '';
SET VAR_STR_INDEX_START = 1;
SET VAR_STR_INDEX_END = VAR_STR_SYMBOL_INDEX - 1;
SET VAR_LOG_SYMBOL_INDEX = VAR_STR_SYMBOL_INDEX;
-- Loop operation
MYLOOP: LOOP
-- Loop end flag
IF DONE = 1 THEN LEAVE MYLOOP; END IF;
-- SELECT VAR_STR_NEW, VAR_STR_NEW_SYMBOL_INDEX, VAR_STR_INDEX_START, VAR_STR_INDEX_END, VAR_LOG_SYMBOL_INDEX FROM DUAL;
-- String intercepted each time
SELECT SUBSTR(SPLIT_STR , VAR_STR_INDEX_START, VAR_STR_INDEX_END) FROM DUAL INTO VAR_STR;
-- Generate a new string after each interception
SET VAR_STR_NEW = SUBSTR(SPLIT_STR, VAR_LOG_SYMBOL_INDEX + 1);
SET VAR_STR_NEW_SYMBOL_INDEX = INSTR(VAR_STR_NEW, SPLIT_SYMBOL);
-- Concatenate the string extracted each time
IF LENGTH(PARAM_OUT) <> 0 THEN
SET PARAM_OUT = CONCAT(PARAM_OUT, REPLACED_SYMBOL, VAR_STR);
END IF;
-- Concatenate the string extracted each time
IF LENGTH(PARAM_OUT) = 0 THEN
SET PARAM_OUT = CONCAT(PARAM_OUT, VAR_STR);
END IF;
--Initialization of the next string interception position
IF VAR_STR_NEW_SYMBOL_INDEX <> 0 THEN
SET VAR_STR_INDEX_START = VAR_LOG_SYMBOL_INDEX + 1;
SET VAR_LOG_SYMBOL_INDEX = VAR_LOG_SYMBOL_INDEX + VAR_STR_NEW_SYMBOL_INDEX;
SET VAR_STR_INDEX_END = VAR_STR_NEW
;
-- The last string is directly spliced without interception and set to leave the loop flag
IF VAR_STR_NEW_SYMBOL_INDEX = 0 AND LENGTH(VAR_STR_NEW) > 0 THEN
SET PARAM_OUT = CONCAT(PARAM_OUT, REPLACED_SYMBOL, VAR_STR_NEW);
-- SELECT VAR_STR_NEW, VAR_STR_NEW_SYMBOL_INDEX, VAR_STR_INDEX_START, END_STR_INDEX_ VAR_LOG_SYMBOL_INDEX FROM DUAL;
SET DONE = 1;
END IF;
-- Set leave loop flag
IF VAR_STR_NEW_SYMBOL_INDEX = 0 AND LENGTH(VAR_STR_NEW) < 1 THEN
SET DONE = 1;
END IF;
-- close loop
END LOOP MYLOOP;
END IF;
RETURN PARAM_OUT;
END