基于函数的对象类型索引

Function-based index on object type

提问人:User1974 提问时间:5/18/2022 最后编辑:User1974 更新时间:5/19/2022 访问量:102

问:

我在 Oracle 18c 表中有一列是对象类型(用户定义类型):Esri 的ST_GEOMETRY空间类型

我想在该列上创建一个基于函数的索引

create or replace function my_owner.test_func(shape in sde.st_geometry) return sde.st_geometry
deterministic is
begin
    return sde.st_geometry_operators.st_startpoint_f(sde.st_geometry_operators.st_geometryn_f(shape,1)); 
end;

create index my_owner.test_idx on my_owner.active_transportation (my_owner.test_func(shape));

我可以毫无问题地创建函数。但是当我尝试创建索引时,它失败了:

Error starting at line : 10 in command -
create index my_owner.test_idx on my_owner.active_transportation (my_owner.test_func(shape))
Error report -
ORA-02327: cannot create index on expression with datatype ADT
02327. 00000 -  "cannot create index on expression with datatype %s"
*Cause:    An attempt was made to create an index on a non-indexable
           expression.
*Action:   Change the column datatype or do not create the index on an
           expression whose datatype is one of  VARRAY, nested table, object,
           LOB, or  REF.

这个错误似乎非常明确:Oracle 无法在对象上创建基于函数的索引。

话虽如此,这种情况有什么解决方法吗?

例如,我是否可以将对象强制转换为函数中的其他内容,在强制转换上创建索引,然后在查询中取消强制转换?

  • 值得一提的是,有一个函数可以将对象转换为 blob。但遗憾的是,基于函数的索引也不支持 Blob。我收到同样的错误。
Oracle 索引 转换 oracle18c 对象类型

评论

0赞 Wernfried Domscheit 5/18/2022
也许可以看看ST_GEOMETRY和SDO_GEOMETRY 基于函数的索引中的互操作性和SDO_GEOMETRY对象 原则上,这似乎是可能的。
1赞 Justin Cave 5/18/2022
您是否正在尝试创建常规的 b 树索引?还是空间索引?我不确定为什么要在空间数据类型上使用常规的 b 树索引,所以我的猜测是要创建空间索引。但我不确定你打算用这个索引做什么。
0赞 User1974 5/19/2022
@WernfriedDomscheit 是的,好主意。为清楚起见,我使用的是 Esri 的 ST_GEOMETRY 版本,它与 Oracle 的 ST_GEOMETRY 不同。但是,是的,我正在考虑在函数/基于函数的索引中转换为SDO_GEOMETRY。话虽如此,有一些复杂性和缺点(如果需要,我可以详细说明)。所以如果可能的话,我希望留在ST_GEOMETRY领域。
0赞 User1974 5/19/2022
@JustinCave 好点子。我尝试创建一个基于函数的空间索引,就像你建议的那样。但是,我无法让制图软件(ArcMap 或 ArcGIS Pro)在显示地图中的点时实际使用空间索引。而且我也没有看到任何 SQL Developer 使用它的证据——在查询中选择行时。我谈到了问题问题:获取地图以使用ST_GEOMETRY基于函数的空间索引。我也在支持下工作,但我并不乐观。[续]
1赞 Justin Cave 5/19/2022
在您链接到的线程中,您似乎没有尝试过滤掉行(至少没有意义)。看起来您只是在尝试缓存计算值。表中的计算列或具体化视图对于该用例更有意义。您是否可以使用其中一种方法,或者是否有某种原因认为基于函数的索引在您的用例中更具架构意义?

答: 暂无答案