本人有1点疑问想请教大家:
1.对于那些频繁执行的语句,使用绑定变量会提高效率,但如果使用绑定变量是不是就一定要用动态SQL(execute immediate)语句来实现,如果必须要用execute immediate语句来实现的话,使用execute immediate语句效率高吗?????
如果不用动态SQL(execute immediate),我想用绑定变量应该如果改,以下是我的语句:但是报错
提示:ora-00933,SQL命令未正常结束;
delete from emp_award where code = :1 and bmonth=:2 using v_code,v_month;
1.对于那些频繁执行的语句,使用绑定变量会提高效率,但如果使用绑定变量是不是就一定要用动态SQL(execute immediate)语句来实现,如果必须要用execute immediate语句来实现的话,使用execute immediate语句效率高吗?????
如果不用动态SQL(execute immediate),我想用绑定变量应该如果改,以下是我的语句:但是报错
提示:ora-00933,SQL命令未正常结束;
delete from emp_award where code = :1 and bmonth=:2 using v_code,v_month;
解决方案 »
- 几道面试题!
- 问一个oracle数据库名的问题????????????????
- 100分题:如何对多条字符串记录进行"汇总"运算?
- 系统重装后PL/Sql中文显示为乱码
- 有没有在64位windows2003上的64位的ORACLE 版本,到哪里下载
- 有没有关于ORACLE版本的错误的中文解释
- 如何不让别人访问我们的Oracle数据库中的某个表?
- 一个SQL查询问题( ORARichard刚才的问题还是没有搞定:-( )
- 一个弱弱的oracle插入语句的写法问题(初学者)!
- 我想备份数据库,出现如下错误,不知道如何解决啊?
- 请问这样一条查询语句又应该怎样写呢?
- make: `/home/oracle_app/lib/libclntsh.so' is up to date.是什么错误?
不过:1.对于那些频繁执行的语句,使用绑定变量会提高效率
能解释一下吗?
这种pl/sql已经是绑定变量了!sql := 'delete from emp_award where code = :1 and bmonth=:2';
execute immediate sql using v1, v2;这样也是绑定变量
l 翻译SQL语句,验证它是合法的语句,即书写正确
l 实现数据字典的查找,以验证是否符合表和列的定义
l 在所要求的对象上获取语法分析锁,使得在语句的语法分析过程中不改变这些对象的定义
l 验证为存取所涉及的模式对象所需的权限是否满足
l 决定此语句最佳的执行计划
l 将它装入共享SQL区
l 对分布的语句来说,把语句的全部或部分路由到包含所涉及数据的远程节点
以上任何一步出现错误,都将导致语句报错,中止执行。 只有在共享池中不存在等价SQL语句的情况下,才对SQL语句作语法分析。在这种情况下,数据库内核重新为该语句分配新的共享SQL区,并对语句进行语法分析。进行语法分析需要耗费较多的资源,所以要尽量避免进行语法分析,这是优化的技巧之一。 语法分析阶段包含了不管此语句将执行多少次,而只需分析一次的处理要求。Oracle只对每个SQL语句翻译一次,在以后再次执行该语句时,只要该语句还在共享SQL区中,就可以避免对该语句重新进行语法分析,也就是此时可以直接使用其对应的执行计划对数据进行存取。这主要是通过绑定变量(bind variable)实现的,也就是我们常说的共享SQL