代码示例:
CREATE OR REPLACE FUNCTION order_string (str IN VARCHAR2) RETURN VARCHAR2 IS ordered_str VARCHAR2(32767) := ''; BEGIN FOR i IN 1..LENGTH(str) LOOP ordered_str := ordered_str || SUBSTR(str, i, 1) || ','; END LOOP;
ordered_str := RTRIM(ordered_str, ',');
SELECT LISTAGG(val, '') WITHIN GROUP (ORDER BY val) INTO ordered_str
FROM (SELECT DISTINCT REGEXP_SUBSTR(ordered_str,'[^,]+',1,level) AS val FROM DUAL
CONNECT BY REGEXP_SUBSTR(ordered_str,'[^,]+',1,level) IS NOT NULL);
RETURN ordered_str;
END;
使用示例:
SELECT order_string('abcdecbadf') FROM DUAL;
结果为:aabbccdddef