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的语法

阅读语法图跳过可视化语法图CREATEPUBLICALIAS 表别名序列别名

表别名

阅读语法图跳过可视化语法图别名FORTABLE table-name视图名称alias-name21
注意:
  • 1 如果指定了 alias-name2 ,则它不能解析为别名的完全限定形式,且 alias-name2 不能是当前服务器上存在的别名

序列别名

阅读语法图跳过可视化语法图别名FORSEQUENCE序列名

描述 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 的公共别名。
	CREATE PUBLIC ALIAS SEQS FOR SEQUENCE JOE.JOESSEQ;
别名可以写为 SYSPUBLIC.SEQS ,如果私人序列或别名SEQS不存在,也可以直接写为SEQS。