50 lines
1.2 KiB
MySQL
50 lines
1.2 KiB
MySQL
-- 查询自定义函数的源代码
|
||
SELECT
|
||
text
|
||
FROM
|
||
user_source
|
||
WHERE
|
||
name = '函数名(全大写,如:HOS_GET_SORTABLE_REF)'
|
||
AND type = 'FUNCTION'
|
||
ORDER BY
|
||
line;
|
||
|
||
-- 自定义函数
|
||
-- 函数说明:入参书编号及数字位数,返回可排序编号,如入参为'ZW1-12-123'和4,则返回'ZW0001-0012-0123',第二个参数可不填,默认为4。
|
||
FUNCTION hos_get_sortable_ref(
|
||
bh IN VARCHAR2,
|
||
len IN NUMBER DEFAULT 4
|
||
) RETURN VARCHAR2 IS v_res VARCHAR2(999);
|
||
|
||
BEGIN
|
||
SELECT
|
||
LISTAGG(str || num, '') WITHIN GROUP (
|
||
ORDER BY
|
||
lev
|
||
) INTO v_res
|
||
FROM
|
||
(
|
||
SELECT
|
||
REGEXP_SUBSTR(ele, '\D*', 1) AS str,
|
||
LPAD(REGEXP_SUBSTR(ele, '\d+', 1), len, '0') AS num,
|
||
lev
|
||
FROM
|
||
(
|
||
SELECT
|
||
REGEXP_SUBSTR(bh, '\D*\d+', 1, LEVEL) AS ele,
|
||
LEVEL AS lev
|
||
FROM
|
||
dual CONNECT BY REGEXP_SUBSTR(bh, '\D*\d+', 1, LEVEL) IS NOT NULL
|
||
)
|
||
);
|
||
|
||
RETURN v_res;
|
||
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND THEN RETURN NULL;
|
||
|
||
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
|
||
|
||
RETURN NULL;
|
||
|
||
END hos_get_sortable_ref; |