资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
之前对ORACLE中的变量一直没个太清楚的认识,比如说使用:、&、&、DEIFINE、VARIABLE等等。今天正好闲下来,上网搜了搜相关的文章,汇总了一下,贴在这里,方便学习。=在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行),而且引起的问题不能通过增加内存条和cpu的数量来解决。之所以这样是因为门闩是为了顺序访问以及修改一些内存区域而设置的,这些内存区域是不能被同时修改。当一个sql语句提交后,oracle会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进行硬分析。而唯一使得oracle 能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量的替代变量。绑定变量能够使得每次提交的sql语句都完全一样。1.sqlplus中如何使用绑定变量,可以通过variable来定义c-sharp view plaincopyprint?1. SQLselect*fromttwhereid=1;2. 3. IDNAME4. -5. 1test6. 7. SQLselect*fromttwhereid=2;8. 9. IDNAME10. -11. 2test12. 13. SQLvariableinumber;14. SQLexec:i:=1;15. 16. PL/SQL过程已成功完成。17. 18. SQLselect*fromttwhereid=:i;19. 20. IDNAME21. -22. 1test23. 24. SQLexec:i:=2;25. 26. PL/SQL过程已成功完成。27. 28. SQLselect*fromttwhereid=:i;29. 30. IDNAME31. -32. 2test33. 34. SQLprinti;35. 36. I37. -38. 239. 40. SQLselectsql_text,parse_callsfromv$sqlwheresql_textlikeselect*fromt41. twhereid=%;42. 43. SQL_TEXTPARSE_CALLS44. -45. select*fromttwhereid=2146. select*fromttwhereid=1147. select*fromttwhereid=:i248. SQL从上面试验发现绑定变量i的使用使查询id=1和id=2的sqlselect *from tt where id=:i得以重复使用,从而避免了hard parse,这里的PARSE_CALLS2包括了一次soft parse2.前两天看到有人在pub上问在sqlplus中通过define和variable定义的变量的区别。其实define定义的我理解不是变量而是字符常量,通过define定义之后,在通过&或者&引用的时候不需要输入了,仅此而已。oracle在执行的时候自动用值进行了替换;而variable定义的是绑定变量,上面已经提到。c-sharp view plaincopyprint?1. C:sqlplusxys/manager2. SQL*Plus:Release.6.0-Productionon星期二4月114:03:0020083. Copyright(c)1982,2007,Oracle.Allrightsreserved.4. 5. 连接到:6. OracleDatabase11gEnterpriseEditionRelease.6.0-Production7. WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions8. SQLdefine9. DEFINE_DATE=01-4月-08(CHAR)10. DEFINE_CONNECT_IDENTIFIER=db11(CHAR)11. DEFINE_USER=XYS(CHAR)12. DEFINE_PRIVILEGE=(CHAR)13. DEFINE_SQLPLUS_RELEASE=1101000600(CHAR)14. DEFINE_EDITOR=Notepad(CHAR)15. DEFINE_O_VERSION=OracleDatabase11gEnterpriseEditionRelease.16. 6.0-Production17. WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions(18. CHAR)19. DEFINE_O_RELEASE=1101000600(CHAR)20. SQLselect*fromtt;21. IDNAME22. -23. 1a24. 2a25. 3abc26. SQLdefinea27. SP2-0135:符号a未定义28. SQLdefinea=129. SQLdefine30. DEFINE_DATE=01-4月-08(CHAR)31. DEFINE_CONNECT_IDENTIFIER=db11(CHAR)32. DEFINE_USER=XYS(CHAR)33. DEFINE_PRIVILEGE=(CHAR)34. DEFINE_SQLPLUS_RELEASE=1101000600(CHAR)35. DEFINE_EDITOR=Notepad(CHAR)36. DEFINE_O_VERSION=OracleDatabase11gEnterpriseEditionRelease.37. 6.0-Production38. WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions(CHAR)39. DEFINE_O_RELEASE=1101000600(CHAR)40. DEFINEA=1(CHAR)41. -通过上面显示define定义的应该是字符(串)常量。42. SQLselect*fromttwhereid=&a;43. 原值1:select*fromttwhereid=&a44. 新值1:select*fromttwhereid=145. IDNAME46. -47. 1a48. SQLselect*fromttwhereid=&a;49. 原值1:select*fromttwhereid=&a50. 新值1:select*fromttwhereid=151. IDNAME52. -53. 1a54. SQLdefineb=a;55. SQLdefine56. DEFINE_DATE=01-4月-08(CHAR)57. DEFINE_CONNECT_IDENTIFIER=db11(CHAR)58. DEFINE_USER=XYS(CHAR)59. DEFINE_PRIVILEGE=(CHAR)60. DEFINE_SQLPLUS_RELEASE=1101000600(CHAR)61. DEFINE_EDITOR=Notepad(CHAR)62. DEFINE_O_VERSION=OracleDatabase11gEnterpriseEditionRelease.63. 6.0-Production64. WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions(65. CHAR)66. DEFINE_O_RELEASE=1101000600(CHAR)67. DEFINEA=1(CHAR)68. DEFINEB=a(CHAR)69. 70. -如果是字符类型那么在引用时别忘了加上单引号,另外通过define定义之后在引用时不需要输入了。71. SQLselect*fromttwherename=&b;72. 原值1:select*fromttwherename=&b73. 新值1:select*fromttwherename=a74. select*fromttwherename=a75. *76. 第1行出现错误:77. ORA-00904:A:标识
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号