CREATE ALIAS

CREATE ALIAS 语句定义当前 或远程 服务器上的表,表分区,视图或数据库文件成员的别名。

调用

此语句可嵌入应用程序中或者以交互方式发出。 它是可以动态准备的可执行语句。

授权

此语句的授权标识所拥有的特权必须至少包括下列其中一项:

此语句的授权标识所拥有的特权必须至少包括下列其中一项:

  • 以下系统权限:
    • *USE 到 "创建 DDM 文件" (CRTDDMF) 命令
  • 数据库管理员权限

如果指定了 SQL 名称,并且存在与创建别名的库同名的用户概要文件,并且该名称与语句的授权标识不同,那么该语句的授权标识所拥有的特权必须至少包含下列其中一项:

  • 对具有该名称的用户概要文件的系统权限 *ADD
  • 数据库管理员权限

要替换现有别名,语句的授权标识所拥有的特权必须至少包含下列其中一项:

  • 以下系统权限:
    • 开始更改 *OBJOPR、*OBJMGT 和 *READ 在别名上的系统权限结束更改
    • DROP 别名所需的所有权限
  • 数据库管理员权限

语法

读取语法图跳过可视语法图CREATEOR REPLACEALIAS别名FOR table-name视图名称 (分区名成员名*LAST)

描述

OR REPLACE
如果当前服务器上存在别名,那么指定替换该别名的定义。 在目录中替换新定义之前,将有效删除现有定义,但不会影响对别名授予的特权。 如果当前服务器上不存在别名的定义,那么将忽略此选项。
别名
命名别名。 名称 (包括隐式或显式限定符) 不得与当前服务器上已存在的索引,表,视图,别名或文件相同。

如果 alias-name 是限定的,那么该名称可以是两部分或三部分的名称。 模式名称不应是系统模式。 如果使用三部分名称,那么第一部分必须标识关系数据库目录中的关系数据库名称。

有关连接到远程关系数据库和本地目录的更多信息,请参阅 SQL 编程分布式数据库编程

如果指定了 SQL 名称,那么将在隐式或显式限定符指定的模式中创建别名。

如果指定了系统名称,那么将在限定符指定的模式中创建别名。 如果未限定,那么将在与为其创建别名的表或视图相同的模式中创建别名。 如果该表不合格,并且在创建别名时不存在:

  • 如果 CURRENT SCHEMA 专用寄存器的值是 *LIBL ,那么将在当前库 (*CURLIB) 中创建别名。
  • 否则,将在当前模式中创建别名。

如果别名不是有效的系统名称,Db2 for i 将生成一个系统名称。 有关生成名称的规则的信息,请参阅 表名称生成规则

FOR table-name view-name
标识要为其定义别名的当前 或远程 服务器上的表或视图。 不能指定别名 (别名不能引用另一个别名) , 除非该名称引用远程服务器上的别名。

table-nameview-name 无需标识创建别名时存在的表或视图。 如果创建别名时表或视图不存在,那么将返回警告。 如果使用别名时表或视图不存在,那么将返回错误。

如果指定了 SQL 名称,但未限定 table-nameview-name ,那么该限定符是隐式限定符。 有关详细信息,请参阅 命名约定

如果指定了系统名称,并且 table-nameview-name 未限定并且在创建别名时不存在, table-nameview-name 由在其中创建别名的库限定。

分区名
标识分区表的分区。

如果指定了分区,那么不能在 SQL 模式语句中使用该别名。 如果未指定分区,那么表中的所有分区都包含在别名中。

如果指定了分区名称,那么不应在 FOR 子句中指定三部分名称。 如果指定了由三个部分组成的名称,并标识了与别名的关系数据库不同的关系数据库,那么使用该别名的任何尝试都将失败。

member-name 或 *LAST
标识数据库文件的成员。 如果未指定成员名并且该表不是分区表,那么将使用 *FIRST。 如果未指定成员名并且该表是分区表,那么将使用所有成员 (分区)。

开始更改如果指定 *LAST,则使用数据库文件的最后一个成员。 这是最近创建的成员。结束更改

如果指定了成员名 开始更改 或 *LAST结束更改,则在大多数 SQL 模式语句中无法使用别名。 它可以在 CREATE PROCEDURE、CREATE FUNCTION 和带有 as-result-table 子句的 CREATE TABLE 中使用。

如果指定了成员名,那么不应在 FOR 子句中指定三部分名称。 如果指定了由三个部分组成的名称,并标识了与别名的关系数据库不同的关系数据库,那么使用该别名的任何尝试都将失败。

注意

别名引用: 可以定义别名以引用系统名称或 SQL 名称。 由于系统名称是在创建处理期间生成的,因此通常建议指定 SQL 名称。

但是,如果别名指定了对三部分名称的引用,并且该别名将用作本机命令或本机访问中的 DDM 文件,那么指定的名称必须是系统名称。

"覆盖数据库文件" (OVRDBF) CL 命令还允许数据库管理器处理数据库文件的个别成员。 但是,在数据库文件的表或成员的分区上创建别名更容易,并且可以通过消除执行覆盖的需求来更好地执行此操作。

别名属性: 别名创建为 DDM 文件的特殊格式。 可以在 SQL 中使用别名和普通 DDM 文件,但如果别名或 DDM 文件指定了非本地关系数据库名称,那么指定的 table-name view-name 必须与别名的名称相同。

仅在当前服务器上创建通过分布式表创建的别名。 有关分布式表的更多信息,请参阅 DB2® Multisystem

别名所有权: 如果指定了 SQL 名称:

  • 如果存在与创建别名的模式同名的用户概要文件,那么该别名的 所有者 就是该用户概要文件。
  • 否则,别名的 所有者 是执行该语句的 线程 的用户概要文件或组用户概要文件。

如果指定了系统名称,那么别名的 所有者 是执行该语句的 线程 的用户概要文件或组用户概要文件。

别名权限: 如果使用 SQL 名称,那么将在 *PUBLIC 上使用系统权限 *EXCLUDE 创建别名。 如果使用系统名称,那么将创建具有 *PUBLIC 权限的别名,由模式的创建权限 (CRTAUT) 参数确定。

如果别名的所有者是组概要文件 (GRPPRF 关键字) 的成员,并且指定了组权限 (GRPAUT 关键字) ,那么该组概要文件也将具有该别名的权限。

REPLACE 规则: 当 REPLACE 重新创建别名时:
  • 将废弃任何现有注释或标签。
  • 维护授权用户。 对象所有者可以更改。
  • 保留当前日志审计。

包和三部分别名: 当应用程序将三部分名称别名用于远程对象和 DRDA 访问时,应用程序的包必须存在于三部分名称中指定的每个位置。 可以使用 CRTSQLPKG CL 命令显式创建程序包。 如果引用了由三个部分组成的名称别名,并且一个包不存在,那么数据库管理器将尝试隐式创建该包。

语法替代方法: 以下关键字是支持与先前发行版兼容的同义词。 这些关键字是非标准的,不应使用:

  • 关键字 SYNONYM 可用作 ALIAS 的同义词。

示例

示例 1: 为 PROJECT 表创建名为 CURRENT_PROJECTS 的别名。

CREATE ALIAS CURRENT_PROJECTS
  FOR PROJECT

示例 2: 在 SALES 表的 JANUARY 分区上创建名为SALES_JAN河口的别名。 销售表有 12 个分区 (每年每个月一个分区)。

CREATE ALIAS SALES_JANUARY
  FOR SALES(JANUARY)

在关系数据库 USARDB 上的模式 REPORTS 中为 SALES 表 示例 3: 创建名为 REPORTS.SALES 的别名。

CREATE ALIAS REPORTS.SALES
  FOR USARDB.REPORTS.SALES