我有像这样的合并查询
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以另一种简单的方式来实现这一点。
答案 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命令的字符串的字符串,事情会变得更加困难。如果您在某些时候需要检测任意级别的嵌套括号,那么根本不能使用正则表达式表示。