将要在生産庫上進行包的預釋出,時遇到如下情況:Warning: Package Body created with compilation errors.整個過程如下:
首先檢查對象的有效個數和無效的個數。
IM@im1>select object_type,status,count(*) from user_objects group by object_type,status;
OBJECT_TYPE STATUS COUNT(*)
------------------ ------- ----------
TYPE VALID 11
VIEW INVALID 3
INDEX VALID 399
TABLE VALID 234
PACKAGE VALID 49
SYNONYM VALID 10
FUNCTION VALID 1
SEQUENCE VALID 173
PROCEDURE VALID 22
PACKAGE BODY VALID 49
DATABASE LINK VALID 6
INDEX PARTITION VALID 79
TABLE PARTITION VALID 79
13 rows selected.
釋出是遇到如下錯誤:
IM@im1>@/tmp/IM_SMS_20110727.pkg
Package created.
Warning:<b> Package Body created with compilation errors.</b>
<b>show error 檢查,無結果顯示。考慮不是文法的問題。</b>
IM@im1>show error
No errors.
檢查對象的有效個數:
PACKAGE BODY VALID 48
PACKAGE BODY INVALID 1 --多一個無效對象
14 rows selected.
<b>測試庫的字元集為NLS_CHARACTERSET= AL32UTF8,而編輯的腳本的windows平台是ANSI,導緻對中文的不相容。</b>
<b>解決辦法是測試環境的NLS_LANG為"AMERICAN_AMERICA.US7ASCII",重新執行包的釋出。</b>
IM@im1>select * from nls_database_parameters;
PARAMETER VALUE
------------- ------------
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET AL32UTF8
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_RDBMS_VERSION 9.2.0.8.0
20 rows selected.
IM@im1>exit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production
oracle@c9e016r3ectk1xl67j8p:aliuid /tmp>export|grep LANG
declare -x LANG="en_US.UTF-8"
declare -x NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
oracle@c9e016r3ectk1xl67j8p:/tmp>
oracle@c9e016r3ectk1xl67j8p: /tmp>export <b>NLS_LANG="AMERICAN_AMERICA.US7ASCII"</b>
oracle@c9e016r3ectk1xl67j8p: /tmp>
oracle@c9e016r3ectk1xl67j8p: /tmp><b>export|grep LANG</b>
<b>declare -x LANG="en_US.UTF-8"</b>
<b>declare -x NLS_LANG="AMERICAN_AMERICA.US7ASCII"</b>
<b>再次執行包的變更,程式正确執行。</b>
oracle@c9e016r3ectk1xl67j8p: /tmp>sqlplus IM
SQL*Plus: Release 9.2.0.8.0 - Production on Fri Jul 29 04:01:29 2011
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Enter password:
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
IM@im1><b>@/tmp/IM_SMS_20110727.pkg</b>
<b>Package created.</b>
<b>Package body created.</b>
IM@im1><b>@/tmp/IM_WEB_ONLIE_20110727.pkg</b>
問題解決。。