【发布时间】:2020-12-12 17:59:29
【问题描述】:
我需要编写一个 PLSQL 函数,该函数必须同时处理 CLOB 和 VARCHAR2 输入,并分别返回 CLOB 或 VARCHAR2。但是无论输入类型如何,该函数实现的功能都是完全相同的(它执行一系列 REGEXP_REPLACE 调用)。是否可以编写一个可以同时接受 CLOB 和 VARCHAR2 并返回接收到的类型的函数?我想避免编写两个非常相似的函数,从而重复代码。
我的第一个函数是这样的:
FUNCTION Test(i_text CLOB) RETURN CLOB IS
v_text CLOB;
BEGIN
v_text := i_text;
... a series of REGEXP_REPLACE calls like v_text := REGEXP_REPLACE(v_text,...)
RETURN v_text
END;
而我的另一个功能是:
FUNCTION Test(i_text VARCHAR2) RETURN VARCHAR2 IS
v_text VARCHAR2;
BEGIN
v_text := i_text;
... a series of REGEXP_REPLACE calls like v_text := REGEXP_REPLACE(v_text,...)
RETURN v_text
END;
由于函数内部有大量 REGEXP_REPLACE 调用,我宁愿只有一个函数 - 如果可能的话。
CLOB 输入可能很大,因此无法在函数调用之前将 CLOB 转换为 VARCHAR2。
甚至 REGEXP_REPLACE 也适用于各种输入,例如 CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB 或 NCLOB。所以这就是为什么我希望有一个解决方案来满足这个需求。
【问题讨论】:
-
请记住,正则表达式操作在 clob 上会非常缓慢。使用 DBMS_LOB 提供的内置功能可能更有效(取决于您希望如何操作输入字符串)。鉴于您应该考虑两种不同功能的性能优势是否超过维护开销。
标签: oracle plsql stored-functions