oracle中的sql是如何执行的:
1、语法检查,如有错误,则报语法错误
2、语义检查,如列不存在,表不存在等
3、权限检查
4、共享池检查:
1、作用是缓存sql语句和语句的执行计划
2、首先对sql语句进行hash计算,根据hash值查找是否在共享池中,如果有则是软解析,直接执行
3.不存在共享池中,跳到第5步,硬解析。
5、优化器:执行硬解析,创建解析树,生成执行计划
6、根据解析树和执行计划执行
如何避免硬解析?
绑定变量,如:
一般情况查询:select * from player where player_id = 10001;
绑定变量查询:select * from player where player_id = :player_id;
问,绑定变量该如何操作?
答:存储过程中
l_param1:=‘a’;l_param2:=‘b’;
l_sql:='select count(*) into :x from table1 where col_1=:y and col_2=:z ';
Execute Immediate l_sql into l_count using l_param1,l_param2;
例2:
variable i number; – 定义变量
exec :i :=1; – 赋值
select * from t where id=:i – 查询(绑定变量)
select sql_text,parse_calls from v$sql where sql_text like ‘select * from t where id=%’ – 查询解析
DDL:数据库定义语言,create、drop、alert
DML:数据库操作语言,增删改查
DCL:数据控制语言:用于定义数据库用户的权限