PL/SQL程序的编译与执行是通过PL/SQL引擎来完成的。KingbaseES中的PL/SQL引擎当前只支持安装到数据库服务器端。
在任一环境中,PL/SQL引擎都接受任何有效的PL/SQL单元作为输入。PL/SQL引擎执行程序语句,但是会将其中的SQL语句发送到数据库中的SQL引擎去执行,再获取其结果,如图1.4所示。
图1.4 服务器端的PL/SQL引擎
当应用程序开发工具处理PL/SQL单元时,会将它们传递给其本地PL/SQL引擎。如果PL/SQL单元不包含SQL语句,则客户端引擎处理整个PL/SQL单元。如果应用程序开发工具需要条件和迭代控制,PL/SQL单元将会非常有用。具体如图1.5所示。
图1.5 客户端的PL/SQL引擎
通常,如果直接利用SQL语句对数据库进行操作,各种相关数据的值在代码中以常量形式指定。而在PL/SQL中,可以通过变量动态指定各种相关量的值,从而实现对数据库的动态操作。
示例1.3: 在PL/SQL语句中执行SQL语句。
功能描述: 本例中,一个PL/SQL匿名块声明了4个PL/SQL变量,并在静态SQL语句INSERT、UPDATE、SELECT中使用它们。
程序代码如下。
在该程序中,SELECT、INSERT和UPDATE语句是非过程化的SQL语言,完成对数据库的操作;而变量的声明、IF语句的逻辑判断则是过程化语言的应用。
PL/SQL程序中引入了变量、控制结构、函数、过程等一系列过程化结构,为更为复杂的数据库应用程序开发提供了可能。