为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:
【CPU】:
【问题描述】*:ubuntu
批量update数据的时候报错No record found in Function based Index【IDX_EMELOYBE_1219】;不清楚这个索引是哪里来的,查询dba_ind_columns查到该索引对应的字段column_position为-1,怎么获取这个索引的函数表达式呢。系统表里面找不到dba_ind_expressions,all_ind_expression,user_ind_expression;
麻烦问下这个问题要如何解决
基于函数的索引问题:该索引IDX_EMELOYBE_1219是一个基于函数的索引(Function-based Index),而不是普通的列索引。
字段column_position为-1:在dba_ind_columns中查询到该索引对应字段的column_position为-1,这进一步确认了这是一个基于函数的索引,而不是直接基于列的索引。
做个实验,只是试一下
你库中没有 dba_ind_expressions,估计版本比较旧
试下下面这个SQL,看看 EXP 列里能否找到函数表达式
KEYINFO是个组合编码,且达梦没有公开编码规则,所以只能碰运气了
SELECT IDX.NAME
,IDXINFO.KEYINFO
,BINTOCHAR(IDXINFO.KEYINFO) EXP
FROM SYSOBJECTS IDX
,SYSINDEXES IDXINFO
WHERE IDXINFO.ID = IDX.ID
AND IDX.SUBTYPE$ = 'INDEX'
AND IDX.NAME = 'IDX_EMELOYBE_1219'
-- 方法1:查询SYSINDEXES系统表
SELECT * FROM SYSINDEXES WHERE NAME = 'IDX_EMELOYBE_1219';
-- 方法2:查询DBA_INDEXES视图(达梦版本可能有所不同)
SELECT * FROM DBA_INDEXES WHERE INDEX_NAME = 'IDX_EMELOYBE_1219';
-- 方法3:使用达梦特有的系统视图
SELECT * FROM ALL_IND_EXPRESSIONS WHERE INDEX_NAME = 'IDX_EMELOYBE_1219';