Oracle 19c下PLSQL索引重建脚本触发ORA-20001错误求助
问题分析与解决
错误原因
你看到的ORA-20001: PROBLEM CREATING INDEX是脚本主动抛出的自定义错误,具体原因如下:
- 第一个创建索引的语句
create index sst_ind1 on sst_table(col0)必然失败——你创建的sst_table仅包含col1和col2字段,不存在col0,执行时触发异常,代码将is_all_index_created设为FALSE。 - 脚本按要求继续执行了第二个索引的创建,成功生成
sst_ind2。 - 脚本末尾的这段代码:
检测到有索引创建失败,主动抛出了这个自定义错误,这就是你看到的报错信息。IF NOT is_all_index_created THEN RAISE_APPLICATION_ERROR(-20001, 'PROBLEM CREATING INDEX'); END IF;
解决方案
根据你的实际需求选择对应修改:
需求1:保留“有失败则最后报错提醒”的逻辑
当前脚本逻辑完全符合要求——既保证失败时继续执行剩余创建操作,又在最后通过报错提示存在索引创建失败。如果你只是疑惑报错的来源,这属于预期行为,无需修改。
需求2:即使有失败,最后也不抛出错误,仅完成可创建的索引
删除脚本末尾的判断抛出错误代码即可,也就是移除以下这段:
IF NOT is_all_index_created THEN RAISE_APPLICATION_ERROR(-20001, 'PROBLEM CREATING INDEX'); END IF;
额外优化建议
你可以在捕获创建异常时,打印更详细的错误信息,方便排查问题:
EXCEPTION WHEN OTHERS THEN dbms_output.put_line('ERROR WITH ' || ind_to_create(l_index) || ': ' || SQLERRM); is_all_index_created := FALSE;
这样会输出具体错误原因(比如ORA-00904: "COL0": invalid identifier),而非仅提示存在错误。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

