分析出Oracle文本搜索/查询中的保留字符

本文关键字:保留 保留字 字符 查询 Oracle 文本 搜索 | 更新日期: 2023-09-27 17:59:20

我正在设计一个网络应用程序,其中有一个搜索页面可以进行全文搜索(我在感兴趣的文本列上创建了一个上下文索引)。使用Oracle,您可以执行CONTAINS查询,运行全文搜索并返回结果-这很好,除非您输入保留字符,例如:

"冰*地方和阿拉斯加"

事实上,你在"ice"后面加了一个"*",这将导致Oracle错误,即

ORA-29902: error in executing ODCIIndexStart() routine
ORA-20000: Oracle Text error:

避免这种情况最优雅的方法是什么——我知道你可以过滤掉保留的字符和关键字——但我本以为会有一种更优雅的方法。如果你知道这样一件事,我真的很想知道:-)


注意:这是运行Oracle文本搜索的代码,没有什么特别之处:

 OracleCommand cmd = new OracleCommand("SELECT ref_id, title, table_name, description FROM v_all_media WHERE CONTAINS (title, :pTitle) > 0", conn);
 cmd.Parameters.Add("pTitle", title);
 OracleDataReader reader = cmd.ExecuteReader();

分析出Oracle文本搜索/查询中的保留字符

{}

使用大括号对字符串或符号进行转义。每件事在转义序列的考虑部分中的一组大括号内。

使用大括号转义单个字符时,转义的字符在查询中成为一个单独的标记。

''

使用反斜杠字符对单个字符或符号进行转义。只有紧跟在反斜杠后面的字符才被转义。

请参阅查询中的特殊字符