You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 19c下PLSQL索引重建脚本触发ORA-20001错误求助

问题分析与解决

错误原因

你看到的ORA-20001: PROBLEM CREATING INDEX是脚本主动抛出的自定义错误,具体原因如下:

  1. 第一个创建索引的语句create index sst_ind1 on sst_table(col0)必然失败——你创建的sst_table仅包含col1和col2字段,不存在col0,执行时触发异常,代码将is_all_index_created设为FALSE。
  2. 脚本按要求继续执行了第二个索引的创建,成功生成sst_ind2。
  3. 脚本末尾的这段代码:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 01:37:27