课程目标
完成本课程的学习后,您应该能够:
•变量绑定的目的
•父子游标
•游标共享
•绑定窥探
•SQL语句处理流程
•硬解析、软解析、软软解析
•变量绑定的应用场景
1。游标
游标可以理解为SQL语句的一个句柄,也叫SQL语句的指针,游标指向一条SQL语句,oracle会话要执行一条SQL时,首先要打开游标。
1.1父子游标:
同样的SQL,因某些其它的差异,会产生另外的cursor。解析操作的结果是将一个父游标与子游标保存到库缓存中。很显然,将它们保存到共享内存的目的是为了重用它们,从而避免硬解析。
父游标 parent cursor ---第一条运行的SQL。
子游标 child cursor ---后续运行的SQL 。
父游标的关键信息是SQL语句的文本。
子游标的关键是执行计划和执行环境。
子游标 child cursor ---后续运行的SQL 。
父游标的关键信息是SQL语句的文本。
子游标的关键是执行计划和执行环境。
实验:
sqlplus test/test drop table t_cursor purge; create table t_cursor as select * from dba_objects; alter system flush shared_pool;
select count(*) from t_cursor; select count(*) from T_cursor; col sql_text format a40; select sql_id, sql_text, executions from v$sql where sql_text like '%select count(*) from%_cursor%' and sql_text not like '%sql_text%'; alter system flush shared_pool; select sql_id, sql_text, executions from v$sql where sql_text like '%select count(*) from%_cursor%' and sql_text not like '%sql_text%';
select count(*) from t_cursor; select count(*) from t_cursor; select sql_id, sql_text, executions from v$sql where sql_text like '%select count(*) from%_cursor%' and sql_text not like '%sql_text%'; alter system flush shared_pool;
--父子游标 alter session set optimizer_mode = all_rows; select count(*) from t_cursor; select sql_id, sql_text,child_number,executions from v$sql where sql_text like '%select count(*) from%_cursor%' and sql_text not like '%sql_text%'; alter session set optimizer_mode = first_rows_10; select count(*) from t_cursor; select sql_id, sql_text,child_number,executions from v$sql where sql_text like '%select count(*) from%_cursor%' and sql_text not like '%sql_text%'; grant select any dictionary to scott; sqlplus scott/tiger drop table t_cursor purge; create table t_cursor as select * from user_objects; col sql_text format a40; select count(*) from t_cursor; select sql_id, sql_text,child_number, executions from v$sql where sql_text like '%select count(*) from%_cursor%' and sql_text not like '%sql_text%';