2017-03-08 DBA日记,sql语句绑定变量及after logon database触发器的影响

手记一:
背景:今日有个DBA的同事和我说一个关于sql语句写法导致硬解释的case ,特滋记录
过程:
当cursor_sharing=force 时,如下sql语句是不会重用执用执行计划的:
SQL1:
select name --不需要显示全部字段
from author
where id=1;

SQL2:
select name --不需要显示全部字段
from author
where id=2;
SQL1和SQL2不能共享执行计划,原因是触发了oracle的 bug:Bug 9488694 : QUERY USING A SUBQUERY FACTORING CLAUSE SHOWS A DIFFERENT SIGNATURE.
验证:select sql_text,force_matching_signature from v$sqlarea where sql_text like '%不需要显示全部字段%'
返回的:,force_matching_signature 结果不一致。

CASE2:
当cursor_sharing=force 时,如下sql语句是不会重用执用执行计划的:
SQL1:
select name
from author
where id=1;

SQL2:
select name
from author
where id=2;
没有注释的情况下,同样的语句是能共享解释计划的。

CASE3:
当cursor_sharing=force 时,当使用显示绑定变量的方式,不管是否存在注释都能共享执行计划,也就是说软解释。
declare
v_sql varchar2(300);
v_id varchar2(300);
v_full_name varchar2(300);
begin
v_sql:='--aa '||chr(10)||'select /*+ qqt */full_name from author where id=:1';
v_dealer_no:='333924378';
execute immediate v_sql into v_full_name using v_id ;
DBMS_OUTPUT.PUT_LINE(v_full_name);
end;
/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值