您的位置:首页 > 数据库

查看PL/SQL编译时的错误信息

2014-11-25 18:12 363 查看
查看PL/SQL编译时的错误信息

转自:http://blog.csdn.net/leshami/article/details/6913026

编译无效对象是DBA与数据库开发人员常见的工作之一。对于编译过程中的错误该如何去捕获,下面给出两种捕获错误的方法。

一、当前数据库版本信息及无效对象

1、查看当前数据库版本

SQL> select * from v$version;

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 -
64bi

PL/SQL Release 10.2.0.4.0 - Production

CORE
10.2.0.4.0
Production

TNS for Solaris: Version 10.2.0.4.0 - Production

NLSRTL Version 10.2.0.4.0 - Production

2、获得数据库中的无效对象

set linesize 180

col object_name format a45

SELECT owner, object_name, object_type, status

FROM dba_objects

WHERE status = 'INVALID'

AND

object_type IN ('PROCEDURE', 'FUNCTION', 'TRIGGER', 'VIEW',
'PACKAGE');

OWNER
OBJECT_NAME
OBJECT_TYPE
STATUS

------------------------------
--------------------------------------------- -------------------
-------

OTC_WRHS_POSITION
OTC_WRHS_POSITION_PCK_tmp
PACKAGE
INVALID

3、编译无效对象(编译方法很多,在此不一一列出)

--注意该包对象中包体的名字含小写字符,因此编译时使用双引号括起来

SQL> alter package
"OTC_WRHS_POSITION"."OTC_WRHS_POSITION_PCK_tmp" compile body;

二、捕获编译错误

1、使用show errors捕获错误

SQL> show errors;

No errors.

SQL> show errors package body
"OTC_WRHS_POSITION"."OTC_WRHS_POSITION_PCK_tmp";

No errors.

2、如果使用show errors无法查询到错误,直接查询视图dba_errors

SQL> desc dba_errors;

Name
Type
Nullable Default Comments

-------------- -------------- -------- -------
---------------------------------------------------------------

OWNER
VARCHAR2(30)

NAME
VARCHAR2(30)
Name of the object

TYPE
VARCHAR2(12)
Y
Type: "TYPE", "TYPE BODY", "VIEW", "PROCEDURE",
"FUNCTION","PACKAGE",

"PACKAGE BODY", "TRIGGER","JAVA SOURCE" or "JAVA CLASS"

SEQUENCE
NUMBER
Sequence number used for ordering purposes

LINE
NUMBER
Line number at which this error occurs

POSITION
NUMBER
Position in the line at which this error occurs

TEXT
VARCHAR2(4000)
Text of the error

ATTRIBUTE
VARCHAR2(9)
Y

MESSAGE_NUMBER
NUMBER
Y

SQL> select owner,name,TEXT from dba_errors where
owner='OTC_WRHS_POSITION' and name='OTC_WRHS_POSITION_PCK_tmp'
and

2 sequence=(select max(sequence) from dba_errors
where owner='OTC_WRHS_POSITION');

OWNER
NAME
TEXT

-------------------- -------------------------
------------------------------------------------------------

OTC_WRHS_POSITION
OTC_WRHS_POSITION_PCK_tmp PLS-00103: Encountered the symbol "ULL"
when expecting one of the following:

. ( ) , * @ % & = - < /
> at in is mod remainder not rem

<> or != or ~= >=
<= <> and or like
LIKE2_LIKE4_ LIKEC_ between || multiset member SUBMULTISET_The
symbol "." was substituted for "ULL" to continue.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: