oracle的存储过程调试,oracle 运行普通方式及调试debug方式存储过程性能区别

调试某一存储过程时,在plsql developer debug调试执行时,20多分钟都执行不完,

后分析如下:

1,查询调试会话运行存储过程的对应sql

select sid,serial#,event,status,sql_id,prev_sql_id,action,module from v$session where suser='123' and sid not in(9,31,151)

2,查询上述sql的内容文本

select sql_text,sql_id from v$sqlarea where sql_id in('g0unxwd406yu0','du7nyv586fquh','4n6y6p4sm7j9r','08vznc16ycuag')

3,经查询一直伴随运行如下sql

SELECT SYS_GUID() FROM SYS.DUAL

declare   runtime_info sys.dbms_debug.runtime_info;

declare ret binary_integer; begin ret := PBSDE.DEBUG_LOOP; end;

INSERT /*+ append */ INTO DEAL_PAY_INFO_TMP ( PAY_ID, ORDER_ID, USER_ID, INVOICE_TYPE, INVOICE_TOP, INVOICE_TOP_NAME, INVOICE_PRICE , INVOICE_CONTENT , INVOICE_CODE , INVOICE_DATE , PAY_TYPE , PAY_BANK_CODE , SEND_TYPE , SEND_TYPE_TIME , IF_CALL , SEND_PROVINCE , SEND_CITY , SEND_COUNTY , SEND_ADDRESS , SEND_POSTCODE , SEND_CUSNAME , SEND_CUSMOBILE , SEND_CUSTELNUM , SEND_CUSEMAIL , CREATE_DATE , CREATE_OPID , DISABLE_DATE , DISABLE_OPID , REC_STATUS , REMARK ) SELECT F_GETNID(), PO.EXT_CUST_ORDER_ID, DU.CUST_ID_Y2, PI.INVOICE_TYPE, PI.INVOICE_TYPE, PI.INVOICE_ADDRESS, PI.INVOICE_PRICE, DECODE(PI.INVOICE_CONTENTS,NULL,1,'企业',2,'个人',1,'商品明细',1,'通信器材',4,'通讯器材',4,'天翼飞Young19元号卡',1), PO.INVOICE_CODE, PI.INVOICE_DATE, PO.REMARK3, PO.REMARK7, PO.REMARK15, (CASE WHEN PO.DELIVER_DATE LIKE '%双休日%' THEN '3' WHEN PO.DELIVER_DATE LIKE '%不限时间%' THEN '2' WHEN PO.DELIVER_DATE LIKE '%工作日%' OR PO.DELIVER_DATE LIKE '%周一至周五%' THEN

最后一条sql是存储过程正常运行的sql,而其它的sql皆是与debug模式相关的sql

然后:我在命令模式直接运行上述的存储过程

80s执行完

且没有出现上述debug模式的对应sql

小结:1,debug模式运行存储过程很慢,在命令模式运行即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用SQLPLUS调试Oracle存储过程,具体步骤如下: 1. 连接到Oracle数据库 首先,需要使用SQLPLUS连接到Oracle数据库,例如: ``` sqlplus username/password@database ``` 其中,username为数据库用户名,password为密码,database为数据库名。 2. 设置调试模式 接下来,需要设置存储过程调试模式,可以使用以下命令: ``` SET SERVEROUTPUT ON SET SERVEROUTPUT ON SIZE UNLIMITED SET SERVEROUTPUT ON FORMAT WRAPPED ``` 这些命令将启用服务器输出,并设置输出格式。SIZE UNLIMITED选项将确保输出不受限制。 3. 编译存储过程调试存储过程之前,需要先编译存储过程。可以使用以下命令编译存储过程: ``` ALTER PROCEDURE procedure_name COMPILE; ``` 其中,procedure_name为存储过程的名称。 4. 设置断点 可以在存储过程中设置断点,以便在执行存储过程时暂停程序执行。可以使用以下命令设置断点: ``` ALTER PROCEDURE procedure_name COMPILE DEBUG; ``` 这将在存储过程编译时启用调试模式,并在存储过程中设置断点。 5. 执行存储过程 可以使用以下命令执行存储过程: ``` EXECUTE procedure_name; ``` 在执行存储过程时,程序将在设置的断点处暂停执行,可以使用SQLPLUS的调试命令来查看变量的值,以帮助调试存储过程。 6. 关闭调试模式 完成调试后,可以使用以下命令关闭调试模式: ``` ALTER PROCEDURE procedure_name COMPILE; ``` 这将关闭调试模式并重新编译存储过程。 以上就是在SQLPLUS中调试Oracle存储过程的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值