请教:DB2中静态SQL和动态SQL的概念,偶比较模糊,谢谢

请教B2中静态SQL和动态SQL的概念,偶比较模糊,
存储过程是属于动态还是静态呢?
谢谢先!

作者: daliwa   发布时间: 2005-01-12

关注一下,顶

作者: myuhan   发布时间: 2005-01-12

存储过程有静态的SQL也有动态的SQL

作者: zzjijun   发布时间: 2005-01-12

希望有高手解释一下,
这虽然看似简单,
但我相信很多人还不是很清楚 .
谢谢

作者: daliwa   发布时间: 2005-01-12

静态,动态时针对sql而言的,简单说,静态sql在编译时确定,动态sql在运行时确定,可以由用户确定,更加灵活

作者: oprs   发布时间: 2005-01-12

参考这个把,对嵌入式的静态,动态sql做了比较

http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/mag_02q2eaton/eaton.shtml

作者: oprs   发布时间: 2005-01-12

老帖子!

学了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.

简单的话是正确的,但是多少人不明白.

作者: tom_fans   发布时间: 2011-05-18