解决方案 »
- 存储过程的 数组 和 FOr 循环
- Sql巨星级别问题啊~~~~~~~~~不知道对高手来说是不是很简单的问题啊~
- rman怎么恢复控制文件???
- 数据库操作
- 紧急询问:如何定义和实现返回可变数组或嵌套表的函数?如何把可变数组或嵌套表当作函数传递?
- 对于高手来说,就是送分题了:如何在标准C中创建存储过程和调用存储过程?
- 怎样在sql*plus中运行带参数的存储过程?
- Oracle查询分析器再次升级!!!
- 如何设置ORACLE字段命名的长度限制
- Oracle有没有类似SQLServer中的select top 10......
- 想学Oracle 从哪里开始
- 为啥分号隔开的两个语句在COMMAND窗口成功,在SQL窗口失败?
update emp set (sal,comm)=
(select max(decode(empno,7499,sal)),max(decode(empno,7654,comm)) from emp where empno in(7499,7654))
where empno=7369empno是主键吧,你那么写已经很优化了
(select decode(empno,7499,sal),decode(empno,7654,comm) from emp empno=7369)
你是更新的员工的sal等于empno为7499,comm等于empno为7654的。如果以上条件都是在以后不变,也就是说,今后你的更新都是更新empno=7369 的员工的sal等于empno为7499,comm等于empno为7654,那么可以说没有什么优化的必要了
但是,如果你是想在今后不是更新empno=7369的信息,而是其他的如empno=1234,这样的话,就有优化的方法。具体做法是使用绑定变量的形式:
update emp set sal=(select sal from emp where empno:=empno_2),
comm=(select comm from emp where empno:=empno_3)
where empno:=empno_1;
因为这样做,SQL语句无论更新那个empno的资料,SQL语句都是一样的,Oracle解析SQL语句就会提高,此SQL语句只需第一次更新就会将解析树和执行计划以及优化方案放入cache中,以后再更新其他的,就不需要再硬解析SQL语句了,直接用cache中的执行计划。楼主,明白了吗?