程序变量和主变量

应用程序可在 SQL 语句内使用程序变量。在 SPL 中,当语法允许时,您可在 SQL 语句中放置程序变量。例如,DELETE 语句可在它的 WHERE 子句中使用程序变量。

下列代码示例展示 SPL 中的程序变量。
CREATE PROCEDURE delete_item (drop_number INT)
      ⋮
      DELETE FROM items WHERE order_num = drop_number
      ⋮

在使用嵌入式 SQL 语句的应用程序中,SQL 语句可引用程序变量的内容。在嵌入式 SQL 语句中命名的程序变量称为主变量,因为在程序中将该 SQL 语句认作是客人。

下列示例展示 DELETE 语句,当将它嵌入在 GBase 8s ESQL/C 源程序中时,它可能出现:
EXEC SQL delete FROM items
        WHERE order_num = :onum;

在此程序中,您看到常规的 DELETE 语句,如同 修改数据 描述的那样。当执行该 GBase 8s ESQL/C 程序时,删除 items 表的一行;还可删除多行。

该语句包含一个新的特性。它将 order_num 列与编写为 :onum 的一项相比较,这是主变量的名称。

SQL API 产品提供一种分隔主变量的名称的方式,当它们出现在 SQL 语句的上下文中时。在 GBase 8s ESQL/C 中,可使用美元符号($)或冒号(:)来引入主变量。冒号是符合 ANSI 的格式。示例语句请求数据库服务器删除其中的订单编号等于名为 :onum 的主变量的当前内容的那些行。在程序中声明了此数值变量并提前分配了值。

GBase 8s ESQL/C 中,可使用前导的美元符号($)或关键字 EXEC SQL 来引入 SQL 语句。

在前面的示例中说明的语法的差异很小; 重要的是,SQL API 和 SPL 语言使您执行下列任务:

如果您有编程经验,则您可立即看到这些可能性。在该示例中,将要删除的订单号码传到变量 onum 中。那个值来自程序可使用的任何源。可从文件读取它,程序可提示用户输入它,或可从数据库读取它。DELETE 语句本身可为子例程的一部分(在此情况下,onum 可为该子例程的参数);可一次或反复地调用该子例程。

总之,当您在程序中嵌入 SQL 语句时,您可对它们应用主语言的所有功能。您可将 SQL 语句隐藏在许多接口之下,且可以多种方式优化 SQL 函数。