CREATE ALIAS 语句
CREATE ALIAS 语句用于为表、视图或序列定义别名。 该定义记录在当前服务器的 Db2 目录中。
调用 CREATE ALIAS
此语句可嵌入应用程序中或者以交互方式发出。 这是一个可执行语句,只有在DYNAMICRULES RUN行为生效时才能动态准备。 更多信息,请参阅授权ID和动态SQL。
授权 CREATE ALIAS
要创建别名,权限集必须至少包含以下列出的权限之一:
为表或视图创建别名:
- 为了餐桌或美景:
- CREATEALIAS权限
- SYSADM 或 SYSCTRL 权限
- 系统 DBADM 权限
安装 SYSOPR 权限(当前进程的 SQLID 设置为 SYSINSTL 时)
仅适用于餐桌:- 如果安装面板 DSNTIPP 上的 DBADM CREATE AUTH 值为 YES,则包含表格的数据库的 DBADM 或 DBCTRL 权限

为序列创建别名:
- 模式中的CREATEIN特权
- SYSADM 或 SYSCTRL 权限
- 系统 DBADM 权限
安装 SYSOPR 权限(当前进程的 SQLID 设置为 SYSINSTL 时)
如果数据库是隐式创建的,则数据库权限必须位于隐式数据库或 DSNDB04 上。
权限设置:
如果语句嵌入到应用程序中,权限集就是计划或软件包所有者所拥有的权限。 如果计划或软件包的所有者是一个角色,则该角色必须拥有权限集的权限。 如果指定的别名包含与本授权ID不同的限定符,则权限集必须包含以下权限之一:
- SYSADM 或 SYSCTRL 权限
系统 DBADM 权限
- 如果别名用于表,则包含该表的数据库的 DBADM 或 DBCTRL 权限,以及安装面板 DSNTIPP 上的字段值 DBADM CREATE AUTH 为 YES
如果 ROLE AS OBJECT OWNER 有效,模式限定符必须与角色相同,除非角色拥有模式上的 CREATEIN 权限、SYSADM 权限、SYSCTRL 权限或系统 DBADM 权限。
如果“作为物品拥有者的角色”未生效,则适用以下规则之一:
如果权限集缺少模式上的 CREATEIN 权限、SYSADM 权限、SYSCTRL 权限或系统 DBADM 权限,则模式限定符(隐式或显式)必须与进程的一个授权 ID 相同。
如果权限集包括 SYSADM 权限、SYSCTRL 权限或系统 DBADM 权限,模式限定符可以是任何有效的模式名称。
如果语句是动态准备的,则权限集是指进程的 SQL 授权 ID 拥有的权限, 除非该进程处于可信上下文中,并且指定了 ROLE AS OBJECT OWNER 子句 如果进程未在受信任的环境中运行,且该环境由 ROLE AS OBJECT OWNER 子句定义,且指定的别名包含与该授权 ID 不同的限定符:
权限集必须包括 SYSADM、SYSCTRL 或系统 DBADM 权限。
- 如果别名用于表,且安装面板 DSNTIPP 上的字段 DBADM CREATE AUTH 的值为 YES,则权限集必须包含包含该表的数据库的 DBADM 或 DBCTRL 权限。
- 限定符必须与进程的授权ID之一相同,且该授权ID所拥有的权限必须包括CREATEALIAS权限。 这是规则的一个例外,即特权集是由进程的SQL授权ID持有的特权。
CREATE ALIAS的语法
描述 CREATE ALIAS
- PUBLIC
- 指定别名是系统模式 SYSPUBLIC 中的对象。
只能为序列指定 PUBLIC。
PUBLIC关键字用于创建公共别名。 如果未指定关键词“PUBLIC”,则创建的别名是私有别名。
- 别名
- 输入别名。
对于表别名,包括隐式或显式限定符在内的名称不能标识当前服务器上存在的表、视图或表别名,也不能标识 SYSIBM.SYSPENDINGOBJECTS 目录表中存在的表。
对于序列别名,名称(包括隐式或显式限定符)不得标识当前服务器上存在的序列或序列别名。
如果指定了由两部分组成的名称,则模式名称不能以“SYS”开头,除非指定了“PUBLIC”,在这种情况下,模式名称必须为“SYSPUBLIC”。 非限定名称不得与现有同义词相同。
如果名字是限定性的,则名字可以是两部分或三部分的名字。 如果使用由三部分组成的名称,则第一部分必须与当前服务器上安装面板 DSNTIPR 中的字段 Db2 位置名称的值相匹配。 (如果当前服务器不是本地服务器 Db2 ,则该名称不一定是当前服务器特殊寄存器中的名称。)
当应用程序使用远程对象和DRDA访问的三部分名称别名时,必须在三部分名称中指定的每个位置绑定应用程序。
- 表格名称 、视图名称或 alias-name2
标识定义了 alias-name 的表、视图或别名。 在定义别名时,表、视图或别名不必存在。 如果创建别名时不存在,则会返回警告。 但是,当使用包含别名的 SQL 语句时,引用的对象必须存在,否则将返回错误。 如果表或视图确实存在,则引用的对象可以在当前服务器上,也可以在另一台服务器上。
如果 alias-name2 必须是由三个部分组成的名称。 三部分名称中的第一部分必须是远程服务器的位置名称。 如果存在别名,该别名必须存在于位置名称所标识的远程服务器中。
如果识别出某个表,则该表不能是辅助表、已声明的临时表或为XML列隐式创建的表。
如果指定了 alias-name2 ,则它不能解析为别名的完全限定形式,且 alias-name2 不能是当前服务器上存在的别名。

- FOR SEQUENCE sequence-name
- 标识定义别名的序列。 序列名不能是 Db2 子系统为身份列或DOCID列生成的序列。 除非模式名称为“SYSADM”,否则模式名称不得以“SYS”开头。 序列名不能是序列的现有别名。
在定义别名时,序列不必存在。 如果创建别名时序列名不存在,则会返回警告。 但是,当使用包含别名的 SQL 语句时,引用的对象必须存在,否则将返回错误。
备注 CREATE ALIAS
- 车主特权:
- 别名没有特殊权限。 有关对象所有权的更多信息,请参阅授权、特权、权限、掩码和对象所有权。
- 公众别名:
- 如果指定了PUBLIC关键字,或者明确指定SYSPUBLIC作为别名的模式限定符,则会创建一个公共别名。
- 解析不合法名称:
- 当解析一个不合法的名称时,首先考虑的是私人别名,然后才是公共别名。
例子 CREATE ALIAS
- 示例 1
- 在 Db2 上为目录表创建一个别名,位置名称为 DB2USCALABOA5281。
CREATE ALIAS LATABLES FOR DB2USCALABOA5281.SYSIBM.SYSTABLES; - 示例 2
- 为序列 JOE.JOESSEQ 创建一个名为 SEQS 的公共别名。
别名可以写为 SYSPUBLIC.SEQS ,如果私人序列或别名SEQS不存在,也可以直接写为SEQS。CREATE PUBLIC ALIAS SEQS FOR SEQUENCE JOE.JOESSEQ;
