- 论坛徽章:
- 0
|
老帖子!
学了ORACLE的人,如果去理解DB2的动态和静态,简直要发狂.
在ORACLE中, select * from table where id=1, 这便是静态
下面便是动态:
declare b varchar(100)
b :='select * from table where id=:1'
execute immediate b using 1
一看就知道,所谓的静态是一开始就知道SQL是什么,动态是开始不知道的,只有在执行的时候,execute immediate才知道原来where id=1.
但是在DB2,这种概念完全改变.
select * from table where id=1 是什么态? 好像是静态,其实在DB2中这是动态SQL.
如果上面这个SQL都是动态,那何为静态呢?
放开一点思维,在DB2中,所谓的动态,是指在执行的时候才编译. 比如你输入select * from table where id=1到cli中,SQL开始执行,自然就要编译。这便是DB2中的动态概念.和SQL没有任何关系,只和编译有关系.
那么静态是什么,问到这个问题,自然有很多人会问什么是bind一个道理. 因为没有理解静态,所以无法理解BIND.
静态是指,SQL之前就编译好了. 已经生成了计划,这便引出了DB2 package的概念, package便是存放了计划的东东. 总之package放了SQL执行一些必要条件. 这东西便是bind产生的.
搜索一下google就知道,解释DB2的静态和动态,大部分是这么说的,动态是执行的时候编译的,需要perpare, 静态是指预先编译,生成了package.
简单的话是正确的,但是多少人不明白. |
|