У меня есть эта функция ниже, которая вызывается из хранимой процедуры для разделения строки через запятую и возврата в виде таблицы. это DB2.
Я пытаюсь реализовать то же самое в MYSQL. но MYSQL не может вернуть таблицу. Мне нужно написать хранимую процедуру для возврата таблицы. вызывающий ИП. Ниже приведен код. Пожалуйста, помогите мне преобразовать в SP, который возвращает таблицу вызывающему SP.
Вызов СП:
DELETE
FROM RAO_FINANCIAL_DETAILS_TRACTN
WHERE FINANCIAL_DETAIL_ID IN
(
SELECT
FINANCIAL_DETAIL_ID
FROM RAO_FINANCIAL_DETAILS
WHERE CUSTOMER_ID IN
(
SELECT
STRING_VALUE
FROM TABLE(FN_RAO_SPLIT(@inputParam,',')) AS TEST
)
)
;
вызванная функция:
`
CREATE FUNCTION FN_RAO_SPLIT
(
STRINGTOSPLIT VARCHAR(2000), DELIMITER VARCHAR(10)
)
RETURNS TABLE
(
ROW_NUMBER INTEGER, STRING_VALUE VARCHAR(250), STRING_POSITION INTEGER
)
NO EXTERNAL ACTION
BEGIN ATOMIC
RETURN WITH RECORDS
(
ROW_NUMBER, STRING_VALUE, STRING_POSITION
)
AS
(
VALUES
(
1,
VARCHAR(SUBSTR(STRINGTOSPLIT, 1,DECODE(INSTR(STRINGTOSPLIT, DELIMITER, 1), 0, LENGTH(STRINGTOSPLIT),INSTR(STRINGTOSPLIT, DELIMITER, 1) - 1)),255)
,
INSTR(STRINGTOSPLIT, DELIMITER, 1) + LENGTH(DELIMITER)
)
UNION
ALL
SELECT
ROW_NUMBER + 1,
VARCHAR(SUBSTR(STRINGTOSPLIT, STRING_POSITION,
DECODE(INSTR(STRINGTOSPLIT, DELIMITER, STRING_POSITION),
0,
LENGTH(STRINGTOSPLIT) - STRING_POSITION + 1,
INSTR(STRINGTOSPLIT, DELIMITER, STRING_POSITION) - STRING_POSITION)),
255),
INSTR(STRINGTOSPLIT, DELIMITER, STRING_POSITION) + LENGTH(DELIMITER)
FROM RECORDS
WHERE ROW_NUMBER < 30000
AND STRING_POSITION > LENGTH(DELIMITER)
)
SELECT
ROW_NUMBER, STRING_VALUE, STRING_POSITION
FROM RECORDS
;--
END
;`