From 11357fd74e6daf3bd48475768cd47f56147d3c04 Mon Sep 17 00:00:00 2001 From: ForeverSmiYng Date: Tue, 5 Aug 2025 14:18:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=87=BD=E6=95=B0=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Oracle自定义函数.sql | 49 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Oracle自定义函数.sql diff --git a/Oracle自定义函数.sql b/Oracle自定义函数.sql new file mode 100644 index 0000000..546a346 --- /dev/null +++ b/Oracle自定义函数.sql @@ -0,0 +1,49 @@ +-- 查询自定义函数的源代码 +SELECT + text +FROM + user_source +WHERE + name = '函数名(全大写,如:HOS_GET_SORTABLE_REF)' + AND type = 'FUNCTION' +ORDER BY + line; + +-- 定义函数 +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; \ No newline at end of file