我有我的用户编写的 SQL 字符串。他们看起来像:
SELECT Name, Age from Users WHERE Name LIKE '%a%' AND {UsersWhere}
在 oracle 服务器端,当要执行这样的 SQL 时,我想先替换 {tags}。{tags} 的替换将是我在表中保存的有效 SQL 子字符串。预制的子 sql。所以处理后的字符串将是有效的 SQL。
是否有一些花哨的内置 Oracle 函数来实现这一点?
感谢您的提示!
我为任何感兴趣的人编写了一个小函数:
CREATE OR REPLACE FUNCTION SA.REPLACE_VARIABLES (p_sql IN VARCHAR2)
RETURN VARCHAR2
IS
vs_return VARCHAR2 (4000);
-- Deklarationen
vs_sql VARCHAR2(4000);
vs_substring VARCHAR2(4000);
vs_variable VARCHAR2(200);
vs_variable_content VARCHAR2(4000);
BEGIN
vs_sql := p_sql;
IF INSTR(p_sql, '{') > 0 THEN
vs_substring := vs_sql;
WHILE LENGTH(vs_substring) > 0 LOOP
IF INSTR(vs_substring, '{') <> 0
THEN
vs_variable := SUBSTR(vs_substring, INSTR(vs_substring, '{'), INSTR(vs_substring, '}') - INSTR(vs_substring, '{') + 1);
-- Do whatever you want with the variable
--vs_sql := REPLACE(vs_sql, vs_variable, vs_variable_content);
-- Substring verkürzen
vs_substring := SUBSTR(vs_substring, INSTR(vs_substring, vs_variable) + LENGTH(vs_variable) + 1);
ELSE
vs_substring := '';
END IF;
END LOOP;
END IF;
RETURN vs_sql;
EXCEPTION
WHEN OTHERS
THEN
-- Err -handle
END REPLACE_VARIABLES;
/
我只是保持简单:
v_sql := REPLACE(v_sql, '{UsersWhere}', '...whatever you need...');