(转)关于PL/SQL Developer中对存储过程add debug information

关于PL/SQL Developer中对存储过程add debug information

 http://space.itpub.net/13129975/viewspace-626245

如果使用PL/SQL Developer中选择一个存储过程debug但又debug不进去!

解决这个问题是很简单的,只需要在PL/SQL Developer中选择要debug的存储过程,然后点右键,在弹出的菜单中选择"Add debug information"后再重新开一个窗口开始debug就能debug进去了。

 

现在的关键问题是:当对一个存储过程选择"Add debug information"后,PL/SQL Developer到底做了什么事情?在PL/SQL Developer中如果某个存储过程能够被debug进去,则你在这个存储过程上点右键,在弹出的菜单中选项"Add debug information"前面会有一个小勾,PL/SQL Developer是从哪儿知道这个小勾应不应该勾上的?

 

第一个问题的答案是PL/SQL Developer实际是执行了ALTER PROCEDUREOWNER.PROCEDURENAME COMPILE DEBUG。

 

如下是我研究上述问题的整个过程:

打开一个 PL/SQL Developer,查询一下这个PL/SQL Developer的main session的sid,这里得到的结果是421。

然后再开一个sql plus的窗口,依次执行如下语句:

SQL> select p.PID,p.SPID,s.SID from v$process p,v$session s where s.paddr = p.addr and s.sid = 421;

 

       PID SPID                SID

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

        28 241816              421

 

SQL> oradebug setospid 241816

Oracle pid: 28, Unix process pid: 241816, image: oracle@p690ca

 

SQL> oradebug unlimit

已处理的语句

 

SQL> oradebug event 10046 trace name context forever,level 12

已处理的语句

 

上述几步做完后回到原先的那个PL/SQL Developer,选中存储过程A_TESTINGFORJOBMANAGER,然后点右键,在弹出的菜单中选择"Add debug information"。

 

再回到sqlplus窗口,依次执行如下语句:

SQL> oradebug tracefile_name

/u01/app/oracle/admin/ipratest/udump/ipratest_ora_241816.trc

 

SQL> oradebug event 10046 trace name context off

已处理的语句

 

然后去看上述trace文件,里面有这样一段:

PARSING IN CURSOR #9 len=60 dep=0 uid=55 ct=25 lid=55 tim=18452123749141 hv=884574241 ad='a2ac0198'

ALTER PROCEDURE CAIPRA.A_TESTINGFORJOBMANAGER COMPILE DEBUG

END OF STMT

PARSE #9:c=0,e=641,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=18452123749137

BINDS #9:

 

你可以随便再选另外一个debug不进去的存储过程,手工执行一下上述sql,你会发现,手工执行完上述sql后,原先debug不进去的存储过程现在已经可以debug进去了。

 

好了,这里我回答了第一个问题。现在我们来回答第二个问题

如法炮制,可以很容易的看到PL/SQL Developer是通过视图sys.all_probe_objects中的字段debuginfo来判断是否应该给一个存储过程的"Add debug information"选项带上小勾。

当debuginfo为T的时候,会有小勾。

当debuginfo为F的时候,就没有小勾。

 

如下是ipradev中ipra用户下所有不能够debug进去的存储过程,大家在debug的时候注意一下:

SQL> select object_name from sys.all_probe_objects t where wner='IPRA' and object_type='PROCEDURE' and debuginfo='F';

 

OBJECT_NAME

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

P_SFINDDIFF

P_SATGENERATEAUDITINTERFACE

P_SAT_GETSATDATFROMSALDAT

P_SAT_GETDATAFROMSAL_1

P_IUPDATEWIV_NC

P_IPACCHECK

P_SATBATCHINTERFACE_NC

P_IPACTOWIV_NC

P_YCALLWRTLOG

 

9 rows selected

 

另外,可以用如下命令方便的在"能够debug"和"不能够debug"之间转换,这里是以caipratest中的存储过程P_ADCGETAGTFORALARM为例来说明:

SQL> select t.debuginfo from sys.all_probe_objects t where object_name='P_ADCGETAGTFORALARM';

 

DEBUGINFO

---------

F

 

SQL> alter procedure P_ADCGETAGTFORALARM compile debug;

 

Procedure altered

 

SQL> select t.debuginfo from sys.all_probe_objects t where object_name='P_ADCGETAGTFORALARM';

 

DEBUGINFO

---------

T

 

SQL> alter procedure P_ADCGETAGTFORALARM compile;

 

Procedure altered

 

SQL> select t.debuginfo from sys.all_probe_objects t where object_name='P_ADCGETAGTFORALARM';

 

DEBUGINFO

---------

F

时间: 2024-08-02 17:42:54

(转)关于PL/SQL Developer中对存储过程add debug information的相关文章

在PL/SQL 开发中调试存储过程和函数的一般性方法

存储过程|函数 在PL/SQL 开发中调试存储过程和函数的一般性方法摘要: Oracle 在PLSQL中提供的强大特性使得数据库开发人员可以在数据库端完成功能足够复杂的任务, 本文将结合Oracle提供的相关程序包(package)以及一个非常优秀的第三方开发工具来介绍在PLSQL中开发及调试存储过程的方法,当然也适用于函数. 版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息.原文出处: http://www.aiview.com/notes/ora_using_

PL/SQL DEVELOPER中查询结果复制出来中文乱码如何解决

PL/SQL DEVELOPER中查询结果导出到EXCEL时中文显示正常,但直接复制出来中文显示为乱码,如何? 解决方案:切换到中文输入法状态,再复制,即可. 本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

(原创)在pl/sql developer中查看package或表结构报ora-01460的解决方法

在pl/sql developer中查看package或表结构报ora-01460的解决方法 今天有同事报有个数据库不能用pl/sql developer查看package或表结构. 开始以为是服务器端与客户端的字符集不一致所至.查看数据库的字符集为ZHS32GB18030select * from V$NLS_PARAMETERS t where t.PARAMETER LIKE '%CHARACTERSET%';PARAMETER                               

Oracle中在pl/sql developer修改表的两种方式

一.方式一 select * from student for update student表需要操作人修改完commit之后才可以做其他的操作,否则该表会被锁住. 二.方式二 select t.*,t.rowid from student t 在pl/sql developer中右击某表,显示的就是该语句,这样做不会将该表锁住. 想修改某几个字段也没有问题select num,name,t.rowid from student t.

Oracle中在pl/sql developer修改表的两种语句

一.方式一 select * from student for update student表需要操作人修改完commit之后才可以做其他的操作,否则该表会被锁住. 二.方式二 select t.*,t.rowid from student t 在pl/sql developer中右击某表,显示的就是该语句,这样做不会将该表锁住. 想修改某几个字段也没有问题select num,name,t.rowid from student t. 该种方式也可以修改多表联合查询的情况,现有table1和ta

Oracle中在pl/sql developer修改表的2种方法_oracle

一.方式一 select * from student for update student表需要操作人修改完commit之后才可以做其他的操作,否则该表会被锁住.   二.方式二 select t.*,t.rowid from student t 在pl/sql developer中右击某表,显示的就是该语句,这样做不会将该表锁住. 想修改某几个字段也没有问题select num,name,t.rowid from student t.

使用PL/SQL developer 查看创建一张表的SQL语句

我们在使用PL/SQL developer中想创建一张表的SQL语句,该如何查看呢? 其实很简单的,我们只需要找到该表,然后右键–"DBMS_元数据"-"DDL",如下图:

设置PL/SQL Developer的方法

PL/SQL Beautifier(PL/SQL 美化器) PLD 6以上版本有对DML代码格式化的功能.在SQL Window或Program Window中选中部分代码(如果 不选则对整个窗口的代码操作),在菜单中选Edit -> PL/SQL Beautifier,得到格式化的代码. 对于非法的DML语句或DDL语句,PLD将会在下方状态栏提示PL/SQL Beautifier could not parse text .在缺省的状态下,PLD会把DML语句的每一个字段都排在单独的一行,这

使用PL/SQL Developer剖析PL/SQL代码

    PL/SQL代码性能瓶颈可以通过DBMS_PROFILER包在命令行的方式下进行剖析来直接获得.对于比较复杂的代码而言,使用图形化的界面来进行剖析无疑是首选.PL/SQL Developer依旧依赖于DBMS_PROFILER包,使用图形化界面来剖析PL/SQL代码,如匿名块,包,过程,函数等,其Profiler结果将列出该剖析代码涉及到的所有包,过程函数等并且可以按照不同的列类型进行排序等.本文以图文的形式介绍了PL/SQL Developer 下实现PL/SQL 代码剖析.   1.