博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)关于PL/SQL Developer中对存储过程add debug information
阅读量:5250 次
发布时间:2019-06-14

本文共 2806 字,大约阅读时间需要 9 分钟。

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

 

如果使用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。

然后再开一个 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

 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

转载于:https://www.cnblogs.com/jimeper/archive/2013/04/02/2995521.html

你可能感兴趣的文章
Kafka学习笔记
查看>>
【原创】Maven安装和配置
查看>>
Octotree Chrome安装与使用方法
查看>>
用CALayer实现下载进度条控件
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
UESTC 1330 柱爷与远古法阵【高斯消元】
查看>>
前端非对称加密,后端Node.js解密(jsencrypt插件)(不需要密钥转码)
查看>>
趣谈Java变量的可见性问题
查看>>
图标字体制作 -- 将SVG制作成图标字体文件,通过引入使用
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
使用AVCaptureSession捕捉静态图片
查看>>
bugku web 头等舱
查看>>
Convert.ToInt32、int.Parse(Int32.Parse)、int.TryParse三者之间的区别
查看>>
算法之【仿竖式算法】
查看>>
java string
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
JAVA跨域CORS
查看>>