使用限定和非限定 SQL

编写 CICS® Db2® 程序的程序员可以使用限定或非限定 SQL。 在限定 SQL 中,将在表或视图名称前指定创建者。 在非限定 SQL 中,未指定创建者。

当程序员开发 CICS Db2 标准时,确定使用合格和不合格的 SQL 非常重要。 此决策会影响 Db2 环境的许多其他方面。 表 1中显示了与其他 Db2 区域的主要关系以及这两种类型的 SQL 语句的一些后果。

表 1. 合格和未合格的 SQL
与其他 Db2 区域的关系 合格 SQL 未限定的 SQL
同义词的使用 不可能 可能
绑定程序标识 任何 与创建者相同
表和表空间的创建者数 任何 应用现代化
使用 VALIDATE (RUN) 合格 使用绑定程序来限定
使用动态 SQL 合格 使用执行程序来限定
需要单独的测试 Db2 子系统 False
在测试 Db2 和生产 Db2 中需要相同的创建者 False
在同一测试 Db2 子系统中使用多个版本的测试表的可能性 False

如果您开发自己的预处理器以在调用 Db2 预编译器之前修改源代码,那么可以绕过 表 1 中显示的一些限制。 例如,这允许您更改 SQL 语句中的创建者。

建议您将限定 SQL 用于动态 SQL 语句,因为它更易于管理。

如果使用非限定 SQL ,那么必须决定如何提供 CREATOR 以完全标识表和视图。 有两种可能性:
  • 您可以使用同义词。 同义词必须由 DB2ENTRY 和 DB2CONN中指定的授权标识创建。 同义词只能由授权标识本身创建。 这意味着您必须开发方法来创建同义词。 可以使用与 DB2ENTRY 或 DB2CONN中指定的授权标识具有相同标识的 TSO 标识。 另一种可能是设计一个 CICS 事务标识 (使用相同的授权标识) ,它本身可以执行 CREATE SYNONYM 语句。 但是,这两种方法都不可取。
  • 如果不使用同义词,那么绑定过程中使用的 CREATOR 是绑定程序的授权标识。 然后,必须使用此标识创建动态 SQL 中引用的所有表和视图。 然后,使用动态 SQL 访问一组公共 Db2 资源的所有事务都必须具有在 DB2ENTRY 或 DB2CONN中指定的相同授权标识。 在大多数情况下,它必须是 SIGNID 或字符串。 此限制通常不可接受。

由于这些原因,建议不要在动态 SQL 语句中使用未限定的 SQL。