从V$SQL中搜索sql时要注意的点

因为经常要观察生产环境的性能问题,所以经常要用v$sql去查sql,如果你也是经常用这个视图的话,你会发现明明刚执行了一些sql,怎么就找不到?。我这里就举几个例子说明下:

CREATE OR REPLACE PROCEDURE MY_test IS
v_cnt  NUMBER;
BEGIN
  SELECT COUNT(1) INTO v_cnt FROM a ;
  END;

你执行这个存储过程

BEGIN
  my_test;
  END;

如果你用 into v_cnt 去v$sql搜索,你会看不到SELECT COUNT(1) INTO v_cnt FROM a 这个SQL,我们看下,这个SQL在V$SQL里面存成什么样子


可以清楚看到,存到v$sql里面的sql,它是省去了 INTO V_CNT这种赋值部分的

修改存储过程,加上注释语句和别名,看是否能识别出来

CREATE OR REPLACE PROCEDURE MY_test IS
v_cnt  NUMBER;
BEGIN
  SELECT/*MMMMMM*/ COUNT(1) INTO v_cnt FROM a tt;
  END;

同样执行下这个存储过程,再去看这个sql存成什么样子


可以看到,别名TT被保留了,你的注释语句不见了,所以,如果你为了想查找方便,在sql里加些注释,那就是白费力气。

以上的情况只是在存储过程或包里的sql才适用,如果你单独写sql,你写成什么样子,就跟你存成什么样子,这也是个很重要的区别

单独执行sql

SELECT/*mmmmmmm*/* FROM b

这个时候你用/*mmmmm*/是可以找到你的sql的


通过上面几个例子,你也许还发现了一个规律,就是单独的sql不会转换你的大小写,而包或存储过程里面的sql,全部跟你转换成了大写!

以上就是我发现的一些规律,希望对大家有用,要是哪位高手知道为什么会这样,请赐教。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值