使用限定和非限定 SQL
编写 CICS® Db2® 程序的程序员可以使用限定或非限定 SQL。 在限定 SQL 中,将在表或视图名称前指定创建者。 在非限定 SQL 中,未指定创建者。
当程序员开发 CICS Db2 标准时,确定使用合格和不合格的 SQL 非常重要。 此决策会影响 Db2 环境的许多其他方面。 表 1中显示了与其他 Db2 区域的主要关系以及这两种类型的 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。