INDEX(NOT INDEXTYPE)对象上没有PRIVILEGES(都不具有EXECUTE特权),因为自己的字典在说:
select * from sys.V_$OBJECT_PRIVILEGE where object_type_name = 'INDEX';
OBJECT_TYPE_NAME OBJECT_TYPE_ID PRIVILEGE_ID PRIVILEGE_NAME
--------------------- -------------- ------------ ---------------
INDEX 32 12 EXECUTE
检查OBJECT_TYPE_ID = 32对应于:
select * from REPCAT$_OBJECT_TYPES where OBJECT_TYPE_ID = 32;
OBJECT_TYPE_ID OBJECT_TYPE_NAME
-------------- -----------------
32 INDEX TYPE
现在,INDEX TYPE用于创建DOMAINS,这意味着特定于应用程序的索引需要EXECUTE特权,因为它与用户定义的索引函数和过程相关联,而不是与实现索引类型有关.
这取自Oracle文档,也参考“使用可扩展索引”
创建索引类型:示例
以下语句创建一个名为position_indextype的索引类型,并指定indextype支持的position_between运算符和实现索引接口的position_im类型.有关使用此索引类型的可扩展索引方案,请参阅“使用可扩展索引”:
CREATE INDEXTYPE position_indextype
FOR position_between(NUMBER, NUMBER, NUMBER)
USING position_im;
在完成实施的最后,您可以执行以下操作:
SELECT last_name, salary FROM employees WHERE
position_between(salary, 10, 20)=1 ORDER BY salary DESC, last_name;