CREATE ALIAS
CREATE ALIAS 语句定义当前 或远程 服务器上的表,表分区,视图或数据库文件成员的别名。
调用
此语句可嵌入应用程序中或者以交互方式发出。 它是可以动态准备的可执行语句。
授权
此语句的授权标识所拥有的特权必须至少包括下列其中一项:
- 要在模式中创建的特权。 有关更多信息,请参阅 在模式中创建所需的特权。
- 数据库管理员权限
此语句的授权标识所拥有的特权必须至少包括下列其中一项:
- 以下系统权限:
- *USE 到 "创建 DDM 文件" (CRTDDMF) 命令
- 数据库管理员权限
如果指定了 SQL 名称,并且存在与创建别名的库同名的用户概要文件,并且该名称与语句的授权标识不同,那么该语句的授权标识所拥有的特权必须至少包含下列其中一项:
- 对具有该名称的用户概要文件的系统权限 *ADD
- 数据库管理员权限
要替换现有别名,语句的授权标识所拥有的特权必须至少包含下列其中一项:
- 以下系统权限:
*OBJOPR、*OBJMGT 和 *READ 在别名上的系统权限
- DROP 别名所需的所有权限
- 数据库管理员权限
语法
描述
- OR REPLACE
- 如果当前服务器上存在别名,那么指定替换该别名的定义。 在目录中替换新定义之前,将有效删除现有定义,但不会影响对别名授予的特权。 如果当前服务器上不存在别名的定义,那么将忽略此选项。
- 别名
- 命名别名。 名称 (包括隐式或显式限定符) 不得与当前服务器上已存在的索引,表,视图,别名或文件相同。
如果 alias-name 是限定的,那么该名称可以是两部分或三部分的名称。 模式名称不应是系统模式。 如果使用三部分名称,那么第一部分必须标识关系数据库目录中的关系数据库名称。
- FOR table-name 或 view-name
- 标识要为其定义别名的当前 或远程 服务器上的表或视图。 不能指定别名 (别名不能引用另一个别名) , 除非该名称引用远程服务器上的别名。
table-name 或 view-name 无需标识创建别名时存在的表或视图。 如果创建别名时表或视图不存在,那么将返回警告。 如果使用别名时表或视图不存在,那么将返回错误。
如果指定了 SQL 名称,但未限定 table-name 或 view-name ,那么该限定符是隐式限定符。 有关详细信息,请参阅 命名约定。
如果指定了系统名称,并且 table-name 或 view-name 未限定并且在创建别名时不存在, table-name 或 view-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 关键字) ,那么该组概要文件也将具有该别名的权限。
- 将废弃任何现有注释或标签。
- 维护授权用户。 对象所有者可以更改。
- 保留当前日志审计。
包和三部分别名: 当应用程序将三部分名称别名用于远程对象和 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