查看package编译时的错误信息及重新编译
开发时,一般都是使用PL/SQL工具进行开发,查看编译错误及重新编译都很简单,但是一般的生产环境是不允许连接外界工具的,只能在命令行中进行重新编译及查看,今天我就遇到了这个问题,现在总结如下:
1、获取数据库中的无效对象:#
1 set linesize 180; 2 col owner format a10 3 col object_name format a45 4 col object_type format a20 5 col status format a20 6 SELECT owner, object_name, object_type, status 7 FROM dba_objects 8 WHERE status = 'INVALID'; 9 10 OWNER OBJECT_NAME OBJECT_TYPE STATUS 11 ---------- --------------------------------------------- -------------------- ------------------ 12 YLPROD DMPAC_ENDOR PACKAGE BODY INVALID
2、编译无效对象#
1 SQL> alter package ylprod.dmpac_endor compile package; 2 3 警告: 更改的包带有编译错误。
这是重新编译包体,package是重新编译包体和包规范。
SQL> alter package ylprod.dmpac_endor compile package;
3.捕获编译错误#
1 SQL> show errors; 2 PACKAGE YLPROD.DMPAC_ENDOR 出现错误: 3 4 LINE/COL ERROR 5 -------- ----------------------------------------------------------------- 6 21/3 PL/SQL: Declaration ignored 7 23/54 PLS-00302: 必须声明 'ENDORNO' 组件 8 27/3 PL/SQL: Declaration ignored 9 29/59 PLS-00302: 必须声明 'ENDORNO' 组件
或者
SQL> show errors package ylprod.DMPAC_ENDOR PACKAGE YLPROD.DMPAC_ENDOR 出现错误: LINE/COL ERROR -------- ----------------------------------------------------------------- 21/3 PL/SQL: Declaration ignored 23/54 PLS-00302: 必须声明 'ENDORNO' 组件 27/3 PL/SQL: Declaration ignored 29/59 PLS-00302: 必须声明 'ENDORNO' 组件
如果使用show errors无法查询到错误,直接查询视图dba_errors
SQL> select owner,name,TEXT from dba_errors where owner='YLPROD' and name='DMPAC_ENDOR'; OWNER NAME ---------- ------------------------------------------------------------------------------------------ TEXT ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ YLPROD DMPAC_ENDOR PLS-00302: 必须声明 'ENDORNO' 组件 YLPROD DMPAC_ENDOR PL/SQL: Declaration ignored
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了