ORA-04043艰难的解决之路

前端之家收集整理的这篇文章主要介绍了ORA-04043艰难的解决之路前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

做项目在Oracle数据库里创建存储过程时,遇见了一个奇葩的问题:

创建了一个名为:PACK_KC_Check 存储过程,编译的时候,提示

对象 PACK_KC_CHECK 已经删除

删除的时候

无论是PLsql上手动删
还是调用sql语句drop procedure PACK_KC_Check;提示

删掉 PACK_KC_Check 错误: ORA-04043: 对象 PACK_KC_CHECK 不存在

当时为了赶项目,负责人让先将这个放在一边,重新创建了一个其他名字的存储过程,将就着用了。

项目完成后,仔细分析,终于解决,特此整理成文

提示

* 本文详细的描述了解决该问题的过程,篇幅比较长,如果急需解决问题请直接跳到尝试3 *


首先要知道

Oracle里,自动将所有的字母做大写处理


解决

该存储过程为:

CREATE OR REPLACE PACKAGE "PACK_KC_Check" as type cur is ref cursor;

---====中间的具体存储过程就不详细描述了


end PACK_KC_Check;

1.尝试方法1

遇见问题,当然下意识的去搜索一下 ORA-04043,看到很多都说是格式的问题,说删除的时候带上""就好了

drop procedure “PACK_KC_Check”;

结果:尝试之,卒。


2.尝试方法2

2.1.验证

因为删除时一直提示

删掉 PACK_KC_Check 错误: ORA-04043: 对象 PACK_KC_CHECK 不存在

所以肯定要验证一下,到底是不是存在该存储过程,该存储过程到底去哪了

SELECT * FROM USER_PROCEDURES ;

查询全部的存储过程后,发现,该存储过程分明就存在

2.2.反思

能够查询该存储过程,但是却提示不存在

肯定是某个环节出错了

仔细对比了一下正常的存储过程与该存储过程的属性

发现该存储过程是INVALID(无效的)
编译都没通过,

2.3修改

CREATE OR REPLACE PACKAGE "PACK_KC_Check" as type cur is ref cursor;


end "PACK_KC_Check";

2.4结果:编译能够通过,删除仍然失败

删掉 PACK_KC_Check 错误: ORA-04043: 对象 PACK_KC_CHECK 不存在


3.尝试方法3

解决到现在,有种只在此山中 云深不知处的无奈

慢慢冷静下来,继续看

删除提示是:

删掉 PACK_KC_Check 错误: ORA-04043: 对象 PACK_KC_CHECK 不存在

* 前后的大小写不一样!!!!!!!!!! *

创建存储过程时,因为加上了引号,所以大小写敏感,数据库中存储的是PACK_KC_Check(有大写有小写),而删除的时候,会自动的将其大写后再删除,当然就不存在了

再次修改

CREATE OR REPLACE PACKAGE "PACK_KC_CHECK" as type cur is ref cursor;

end "PACK_KC_CHECK";

删除成功


总结

为避免因字母大小写导致的问题,在编写存储过程或其他有关命名时尽量直接就采用大写

原文链接:https://www.f2er.com/oracle/210854.html

猜你在找的Oracle相关文章