1

我有我的用户编写的 SQL 字符串。他们看起来像:

SELECT Name, Age from Users WHERE Name LIKE '%a%' AND {UsersWhere}

在 oracle 服务器端,当要执行这样的 SQL 时,我想先替换 {tags}。{tags} 的替换将是我在表中保存的有效 SQL 子字符串。预制的子 sql。所以处理后的字符串将是有效的 SQL。

是否有一些花哨的内置 Oracle 函数来实现这一点?

感谢您的提示!

4

2 回答 2

0

我为任何感兴趣的人编写了一个小函数:

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;
/
于 2013-08-01T19:16:01.050 回答
0

我只是保持简单:

v_sql := REPLACE(v_sql, '{UsersWhere}', '...whatever you need...');
于 2013-08-02T01:32:42.043 回答