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

    编译无效对象是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、编译无效对象(编译方法很多,在此不一一列出)    

/**************************************************/
/* Author: Robinson Cheng                         */
/* Blog:   http://blog.csdn.net/robinson_0612     */
/* MSN:    robinson_0612@hotmail.com              */
/* QQ:     645746311                              */
/**************************************************/                          

--注意该包对象中包体的名字含小写字符,因此编译时使用双引号括起来
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 o
                                               f the following:                                                         

                                                  . ( ) , * @ % & = - + < / > at in is mod remainder not re
                                               m
                                                  <an exponent (**)> <> or != or ~= >= <= <> and or like LI
                                               KE2_
                                                  LIKE4_ LIKEC_ between || multiset member SUBMULTISET_
                                               The symbol "." was substituted for "ULL" to continue.                    

                                                   
                                              

 

时间: 2024-10-22 03:13:24

查看PL/SQL编译时的错误信息的相关文章

正确理解PHP程序编译时的错误信息

编译|程序|错误     我们编写程序时,无论怎样小心谨慎,犯错总是在所难免的.这些错误通常会迷惑PHP编译器.如果开发人员无法了解编译器报错信息的含义,那么这些错误信息不仅毫无用处,还会常常让人感到沮丧. 编译PHP脚本时,PHP编译器会尽其所能报告它遇到的第一个问题.这样就产生一个问题:只有当错误出现时,PHP才能将它识别出来(本文后面对此问题进行了详细描述).正是由于这个缘故,编译器指出出错的那行,从表面上看来可能语法正确无误,或者可能是根本就不存在的一行! 更好地理解错误信息可以大大节省

PHP技巧:正确理解PHP程序编译时的错误信息

   我们编写程序时,无论怎样小心谨慎,犯错总是在所难免的.这些错误通常会迷惑PHP编译器.如果开发人员无法了解编译器报错信息的含义,那么这些错误信息不仅毫无用处,还会常常让人感到沮丧. 编译PHP脚本时,PHP编译器会尽其所能报告它遇到的第一个问题.这样就产生一个问题:只有当错误出现时,PHP才能将它识别出来(本文后面对此问题 进行了详细描述).正是由于这个缘故,编译器指出出错的那行,从表面上看来可能语法正确无误,或者可能是根本就不存在的一行! 更好地理解错误信息可以大大节省确定并改正错误内容

oracle10-我的用PL/sql登陆时出现 ora-28000的错误

问题描述 我的用PL/sql登陆时出现 ora-28000的错误 登陆时出现 ORA-28000:the account is locked 如何解锁,我试了很多方法 都是没法登陆. 解决方案 第一步:使用PL/SQL,登录名为system,数据库名称不变,选择类型的时候把Normal修改为Sysdba; 第二步:选择myjob,查看users; 第三步:选择system,右击点击"编辑": 第四步:修改密码,把"帐户被锁住"的勾去掉: 第五步:点击"应用

打开Lotus Notes时收到错误信息: Notes Directory inaccessible

问题:打开Lotus Notes时收到错误信息: Notes Directory inaccessible 原因:权限导致 解决方法:google了一下,到了IBM Lotus的官方KB,看了几条,大部分说是admin权限的原因.于是把Notes文件夹赋予user完全控制的权限,再试,打开了. 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Office/soft/

c-程序编译编译时提示错误

问题描述 程序编译编译时提示错误 程序编译编译时提示错误 Cannot open include file: 'dshow.h': No such file or directory ,什么问题,如何解决,急求 解决方案 没有包含dshow.h头文件,在使用的地方#include ""dshow.h"" 解决方案二: 'dshow.h' 是 DirectX 开发包中的头文件,你的编译环境中应该是没有这个头文件,才导致编译出错的. 安装 DirectX SDK 试试吧

图像处理问题:在跑有关图像处理的代码时在linux下编译时出现错误如下

问题描述 图像处理问题:在跑有关图像处理的代码时在linux下编译时出现错误如下 应该怎样修改? 解决方案 源代码有问题,如果不是源代码的问题就是缺少头和库,或者头和库的路径没有被添加到编译器的路径中.先看下出错的源代码文件的出错行,找到对应函数所用的头和库. 解决方案二: 你是不是调用了别的库?我看应该是你代码中用了别的库,但是没有用对.

struct-这个代码在编译时没有错误,在运行时却弹出debug assertion failed line52

问题描述 这个代码在编译时没有错误,在运行时却弹出debug assertion failed line52 #ifndef Linkstack_H #define Linkstack_H #include using namespace std; template struct Node { T data; Nodenext; }; template class LinkStack { public: LinkStack();//{top=NULL;} ~LinkStack(); void P

c语言问题-大家好,下面这段程序在vc6.0中编译时没错误,但却运行不起来。麻烦帮看一下

问题描述 大家好,下面这段程序在vc6.0中编译时没错误,但却运行不起来.麻烦帮看一下 #include #include int main() { int shu,shang,i,yushu; int a[16]={0}; clrscr(); printf("shu ru yi ge shu shi jin zhin "); scanf("%d",shu); for(i=0;i { yushu=shu%2; shang=shu/2; a[i]=yushu; shu

ubuntu系统下跑图像处理的代码,编译时出现错误

问题描述 ubuntu系统下跑图像处理的代码,编译时出现错误 编译时出现以下错误 不知道什么原因造成的,望各位给解释解释 解决方案 头文件没有找到,路径包含正确吗 解决方案二: 一般都是头文件的饿问题吧