開發時,一般都是使用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