数据库虽然在学校系统学习过,但是在工作中真正使用起来收获又是不一样的,今天起打算将项目中使用到的技术再分享出来,不以书本的顺序,只从碰到的问题为顺序。
虽然不是纯粹的数据库工程师,但是每个程序员总免不了要写sql语句。最近一直在写服务,从数据库读取数据,但是当项目上线之后再回过头来看这些sql语句,总发现有很多是相似的,不如where条件有很多是一样的。这让我想起一句话,大意是:如果程序中有很多相同的代码,那么尽量去提取出来(当然是尽量,不是一定要提取,这个要注意)。那么sql语句不也是一样吗,比如,如果有相似的查询语句,就应该作为存储过程公共使用。比如下面说的,变量绑定技术。
Oracle在执行sql查询语句时,首先从共享池中查找当前使用的完全相同的(指所有字符相同,字母大小写相同、空格相同)查询sql语句。所谓共享池中就是指都是经过解析和优化的语句。所以如果共享池中有公用的语句,那么减少了重新解析和优化,效率将会提高。下面来看变量绑定如何使用。
有一个tb_Name表,有id、name字段。
select * from tb_Name where id='12345'
假设id='12345'其他地方也用到。
那么,声明一个变量:_setid
begin :_setid:='12345'; end
那么在其他语句中直接使用这个变量,
select name from tb_Name where id=:_setid
这样节省了解析优化的时间。
当然变量绑定只有在反复使用某个语句时使用。