可以拆分insert语句和;使用java从合并查询更新语句

时间:2012-07-20 07:16:30

标签: java

我有像这样的合并查询

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以另一种简单的方式来实现这一点。

1 个答案:

答案 0 :(得分: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 documentation了解如何制定正则表达式。

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