Oracle CONTAINS出现无效标识符ORA-00904。

3

我有一个web应用程序,它接收一段字符串,其中ID元素被分隔符“-”(例如someid1-someid2)分开。然后,我将该字符串转换为类似于someid1 OR someid2的形式。根据Oracle文档理论上应该允许我执行以下操作:

SELECT somecol1, somecol2 FROM sometable WHERE CONTAINS (somecol1, 'someid1 OR someid2') > 0;

然而,当我在SQL Dev中运行示例查询时,出现以下错误:
ORA-00904: "CONTAINS": 无效的标识符 00904. 00000 - "%s:无效的标识符" *原因: *操作:
Oracle的版本是“Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production”,文档也是如此,因此我不明白为什么“CONTAINS”会被视为无效标识符。添加其他可选参数。
SELECT somecol1, somecol2 FROM sometable WHERE CONTAINS (somecol1, 'someid1 OR someid2', 1) > 0;

同样会出现错误,我/它在这里做错了什么?

编辑:
根据要求,“工作中的代码”,尽管有争议,但它实际上并未起作用。

SELECT tech, product FROM tech_det_view WHERE CONTAINS (tech, 'test OR qual') > 0;

看起来不错,但我认为这是假代码。你能提供可运行的代码吗? - Robert
2
有人会说的,9.2版本的扩展支持已经在7年前结束了。你考虑过升级吗? - Ben
我只是一位卑微的实习生;我怀疑自己对公司没有影响力,也无法证明推动所有数据库升级到更新版本的必要性,特别是因为9.2版本支持 CONTAINS。 - Kurt Wagner
@Parado 我正要提到这个。我对开发/模拟“环境”(旧数据以安全地处理,但使用较新的Oracle版本)运行了相同的查询,并得到了ORA-20000:Oracle Text错误:DRG-10599:列未索引。所以也许v9.2数据库不够“聪明”,会给出一个“坏”的错误?如果CONTAINS需要一个唯一索引(例如几个列),那么我需要吗?或者如果这个列有一些重复,只索引这个列是否可以? - Kurt Wagner
@KurtWagner 请查看答案 - Robert
显示剩余2条评论
1个回答

4

在使用CONTAINS函数之前,您需要创建oracle文本索引

CREATE INDEX idxName ON tableName(columnName) INDEXTYPE IS CTXSYS.CONTEXT;

这里提供了关于Oracle Text的更多信息。


错误报告: SQL 错误:ORA-01702:此处不适合使用视图 01702. 00000 - “此处不适合使用视图”那么我需要对视图实际提取的列/表进行索引,是这样吗?还是因为我的实际查询是从视图中提取的,所以我仍然会遇到先前的索引错误? - Kurt Wagner
@KurtWagner 啊,tech_det_view 是一个视图吗?你能包含一下视图主体吗?或者告诉我在哪个表中有 tech 列? - Robert
看起来你更新了你的答案。我已经更改了视图中引用的表/列,并且目前遇到了权限问题,尽管这是模拟环境。如果它修复了问题,最坏的情况下我可以在模拟环境中运行SQL查询来使用CONTAINS函数(如果它在生产中不起作用),并链接到生产数据。我很确定这个索引就是答案,但是只要我获得了特权并能够对其进行索引以确认,我就会标记它! - Kurt Wagner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接