这里,只是结合到目前的经验来进行综述,欢迎批评指正。
PLSQL程序的执行过程很玄妙,差不多覆盖掉了高级语言执行顺序对我的认知;
总的来说,plsql执行顺序是同高级语言执行顺序不同,先说高级语言,是先从变量定义声明、输入参数、执行运算操作、输出;而PLSQL是从入口函数开始,根据程序顺序执行。
对比来看,高级语言需要先定义声明变量,这是因为程序要开辟一块储存空间,为了存储输入的变量、执行操作时的中间变量和将要输出的变量,因此高级语言程序是从声明开始的。
这一部分就凸显出了数据库编程语言的极大不同,首先说一下数据库底层的东西。数据库最底层的是表,基于表创建的视图也相当于表的一种扩展,在往上层来看则是表空间(在定义表时要给表分配的存储空间),在往上看是数据文件,这相当于物理层面的。也就是说,程序不用提前声明存储空间,而是直接执行对空间的操作。
因此,玄妙的程序过程是这样的,进入main函数(这里假设main函数是入口函数),有输出就输出,但不会对变量的声明和游标等进行处理,进入方法或者过程,当执行
Select * from gl_balance 时,才会调用到这个表的存储空间进行数据的读取,或者当执行:
FOR i IN c LOOP (c是一个游标)
才开始进入声明游标的地方,获取值,进行处理。可以想象,程序的执行是当执行到表时,才进入表空间里,fetch里面的数据,当执行到视图时,才获取视图里的值,其实也是获取表里的值和按一定逻辑取到的值……玄幻。