我有一个查询需要连续运行 28000 次,所以我认为使用准备好的语句可能是一个聪明的主意。
这是我的查询:
String requestWithFirstName = "SELECT SE.ELEMENT_ID, SE.LASTNAME||' '||SE.FIRSTNAME AS ELEMENT, (SCORE(1)+SCORE(2))/2 AS SCORE "
+ "FROM BL_SUSPICIOUS_ELEMENT SE "
+ "WHERE CONTAINS(SE.LASTNAME, 'fuzzy({' || ? || '},' || ? || ',' || ? || ', weight)' , 1)>0 "
+ "AND CONTAINS(SE.FIRSTNAME, 'fuzzy({' || ? || '},' || ? || ',' || ? || ', weight)' , 2)>0 "
+ (type > 0 ? "AND SE.ELEMENT_TYPE_ID = ?" : "")
+ " ORDER BY SCORE DESC";
一切都工作得很好,直到我们意识到模糊方法对于像“皮卡丘是我的英雄”这样的分裂单词表现不佳,建议在这种情况下创建 4 个模糊搜索“皮卡丘”“是”“我的””英雄'。不确定这是否属实,但由于我将运行该查询 28,000 次,因此这是一个了解其实际情况的好机会。
所以我尝试以这种方式修改查询:
"SELECT A.ELEMENT_ID, A.LASTNAME||' '||A.FIRSTNAME AS AKA, SCORE(1) AS SCORE "
+ "FROM BL_AKA A, BL_SUSPICIOUS_ELEMENT SE "
+ "WHERE CONTAINS(A.LASTNAME, ?, 1)>0 "
+ "AND SE.ELEMENT_ID = A.ELEMENT_ID "
+ (type > 0 ? "AND SE.ELEMENT_TYPE_ID = ?": "")
+ " ORDER BY SCORE DESC";
在这种情况下, ?将被设置为:
'模糊({伯纳姆},70,4,权重),模糊({投资者},70,4,权重),模糊({信任},70,4,权重)'
查询看起来很好,在 sql dev 上运行。但是,使用 Java 时,我收到以下错误:
ORA-20000: Oracle 文本错误:
DRG-50900:第 1 行第 30 列上的文本查询解析器错误
DRG-50920:短语的一部分本身不是短语或等价物
DRG-50900:第 1 行第 30 列上的文本查询解析器错误
DRG-50920:短语的一部分本身不是短语或等价物
有什么建议吗?
我想知道这是否与 in 语句相同的情况(不可能创建 select * from pokemon where monster in (?))
Thanks !