不限制的对象名称解析
大多数对象名称都隐式或显式地带有模式名称。 同义词是个例外。
同义词只有一个零件名称。 当 Db2 遇到一个不合格的名称时, Db2 必须确定要处理哪个对象。 这个过程称为名称解析。
当 Db2 遇到一个可以在上下文中指定别名、表、视图或同义词的单个零件名称时, Db2 首先检查该名称是否是指当前用户定义的同义词。
除了同义词之外,其他非限定性对象名称都是隐含限定性的。 根据名称所标识的对象类型,名称的限定规则有所不同。
无限制的别名、索引、JAR文件、掩码、权限、序列、表、触发器和视图名称
默认模式确定如下:
对于静态SQL语句,默认模式是在BIND子命令的QUALIFIER选项中指定的标识符,或者用于SQL例程或触发器的CREATE或ALTER语句。 如果此选项对计划、包或本机 SQL 过程无效,则默认模式为计划、包或本机 SQL 过程所有者的授权 ID。
- 对于动态 SQL 语句,由 DYNAMICRULES 选项和运行时环境组合指定的行为决定默认模式。 (有关这些行为以及决定这些行为的动态规则值的列表,请参见表1 )。
- 如果动态规则运行行为适用,则默认模式为当前模式特殊寄存器中的模式。 默认运行行为。
- 如果绑定行为适用,则默认模式是在QUALIFIER选项中隐式或显式指定的标识符,如静态SQL语句中所述。
- 如果定义行为适用,则默认模式是函数或存储过程的所有者(所有者是定义者)。
- 如果调用行为适用,则默认模式是函数或存储过程的调用者的授权ID。
例外 :对于绑定、定义和调用行为,PLAN_TABLE、DSN_STATEMNT_TABLE和DSN_FUNCTION_TABLE(EXPLAIN语句的输出)的默认模式始终是特殊寄存器CURRENT SQLID中的值。
无限制的类型、函数、过程、全局变量和特定名称
非限定类型(内置类型、不同类型或数组类型)、函数、存储过程、全局变量和特定名称的限定取决于非限定名称出现的SQL语句。
- 如果一个非限定名称是ALTER、CREATE、COMMENT、DROP、GRANT或REVOKE语句的主要对象,则该名称将隐式地使用模式名称进行限定,如下所示:
在静态语句中,隐式模式名称是指在BIND子命令的QUALIFIER选项中指定的标识符,或者是指在SQL例程或触发器的CREATE或ALTER语句中指定的标识符。 如果此选项对程序包或程序无效,则隐式限定符为程序包或程序所有者的授权ID。
- 在动态语句中,隐式模式名称是当前模式特殊寄存器中的模式。
- 否则,无限定名称的隐式模式名称按如下方式确定:
- 对于不同的类型和数组类型名称, Db2 会搜索 SQL路径并选择路径中的第一个模式,前提是该模式中存在该数据类型,且用户有权限使用该类型。
- 对于全局变量名, Db2 会搜索 SQL路径并选择路径中的第一个模式,前提是该模式中存在全局变量,且用户有权限使用该全局变量。
- 对于函数名称, Db2 使用 SQL路径与函数解析相结合,如函数解析中所述。
- 对于CALL语句中的存储过程名称, Db2 会搜索 SQL路径并选择路径中的第一个架构,该架构包含一个具有相同名称和参数数量的存储过程,且用户有权限使用该存储过程。
- 对于关联定位器和描述程序语句中的存储过程名称, Db2 不使用SQL路径,因为这些语句不会生成隐式模式名称。
有关 SQL路径的信息,请参阅 SQL路径。