-1

我有一个像这样的合并查询

MERGE INTO dept a
 USING (
     SELECT  50           deptno
          , 'ENGINEERING' dname
          , 'WEXFORD'     loc
     FROM dual
 ) b
 ON (a.deptno = b.deptno)
 WHEN NOT MATCHED THEN
     INSERT VALUES (b.deptno, b.dname, b.loc)
 WHEN MATCHED THEN
     UPDATE SET a.loc = 'WEXFORD, PA';

我需要像这样的输出:

INSERT VALUES (b.deptno,b.dname,b.loc)
UPDATE SET a.loc='WEXFORD,pA'

我可以通过使用 substring 任何其他简单的方法来实现这一点吗?

4

1 回答 1

1

据我了解,您并不特别关心执行查询,您只想提取查询文本的某些部分,对吗?您最好的办法是制定一个描述这些部分的正则表达式,将它们与输入字符串进行匹配,然后打印您找到的每个匹配项的相关部分。

一个简单的例子是这样的:

import java.util.regex.*;
class Foo {
    private static final Pattern re
      = Pattern.compile("INSERT VALUES \\(.*?\\)|UPDATE SET .*;");
    static void find(String text) {
        Matcher m = re.matcher(text);
        while (m.find())
            System.out.println(m.group());
    }
}

这个简单的示例期望插入部分包含与表达式中完全一致的空格,并且后跟一个带括号的参数列表。更新预计将持续到查询结束。有关如何制定正则表达式的信息,请参阅Pattern 文档。

如果要处理可能包含括号、分号甚至看起来像 SQL 命令的单词的字符串,事情会变得更加困难。如果您在某些时候需要检测任意级别的嵌套括号,那么这根本无法使用正则表达式来表达。

于 2012-07-20T07:25:29.817 回答