2017-03-08 DBA日记,sql语句绑定变量及after logon database触发器的影响
2017-04-04 09:41
309 查看
手记一:
背景:今日有个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;
/
背景:今日有个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;
/
相关文章推荐
- oracle v$sqlarea 分析SQL语句使用资源情况 确认是否绑定变量
- 用Oracle绑定变量替代sql语句里常量
- 在JAVA 源程序中编写SQL语句时使用ORACLE 绑定变量
- 统计没有使用绑定变量的sql语句
- 2017-05-21 DBA日记,SQL语句诊断思维图
- 使用字面量或者绑定变量在HANA Studio里执行SQL语句
- V$SQL视图中SQL_TEXT的SQL语句是绑定变量,常量在v$sql_bind_capture视图的VLUE_STRING字段中可以查到
- Oracle数据库SQL语句绑定变量一----性能问题
- Oracle 获取没有使用绑定变量的SQL语句
- Oracle读书摘录1---为什么要书写绑定变量的SQL语句
- DBA手记 - optimizer_mode影响一个SQL语句是否可以执行
- oracle v$sqlarea 分析SQL语句使用资源情况 确认是否绑定变量
- 捕获非绑定变量的SQL语句
- DBA手记-optimizer_mode影响一个SQL语句是否可以执行
- 使用字面量或者绑定变量在HANA Studio里执行SQL语句
- Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名
- 直方图对绑定变量sql的影响
- 构造绑定含有绑定变量的JAVA的SQL语句执行计划
- 统计没有使用绑定变量的sql语句
- DBA手记 - optimizer_mode影响一个SQL语句是否可以执行