SQL中的标识符
标识符是用于形成名称的标记。 SQL语句中的标识符可以是SQL标识符,也可以是主机标识符。 SQL标识符可以是普通标识符或分隔标识符。
普通标识符
普通标识符由一个大写字母和零个或多个字符组成,每个字符可以是字母、数字或下划线。 如果一个未加定界符的标识符包含小写字符,但符合普通标识符的所有规则,则 Db2 会将小写字母转换为大写,该标识符就变成了普通标识符。 有关普通标识符的更多信息,请参阅 SQL中的字符和标记。
普通标识不能是保留字。 如果保留字在SQL中用作标识符,则必须以大写形式指定,且必须是带分隔符的标识符,或指定在主机变量中。 保留字列表请参阅 Db2 for z/OS 中的保留模式名称和保留字。
除非另有说明,仅包含双字节字符集字符的标识符也可以是普通标识符。
以下列表显示了SQL普通标识符的构成规则:
- UTF-8 名称不得超过 128 字节。
- 不允许继续到下一行。
如果SQL普通标识符包含DBCS字符,则适用以下附加规则:
- 如果标识符使用EBCDIC编码,则必须以移位符( X'0E' ),以换入符号( X'0F' )。 移出和移入之间的字节数必须是偶数。 这些转换之间的奇数字节不能是转换输出。 在移出和移入之间,不接受DBCS空格(EBCDIC中的X'4040')。
- 标识不会自动变为大写或发生任何其他变化。
定界标识
"VIEW"转义字符为引号( " ),但以下情况除外:- 动态 SQL,当安装面板上的字段 SQL STRING DELIMITER 设置为引号("),且满足以下任一条件时:
- 动态规则运行行为适用。 有关指定运行、绑定、定义或调用行为的DYNAMICRULES选项值的列表,请参阅授权ID和动态SQL。
- 动态规则绑定、定义或调用行为,安装面板中的“动态规则使用”字段为“是”。
但是,对于COBOL应用程序,如果DYNAMICRULES运行行为不适用,并且安装面板中的USE FOR DYNAMICRULES字段为NO,则COBOL编译器选项将指定转义字符是引号还是单引号。
- COBOL应用程序中的静态SQL。 COBOL编译器选项指定转义字符是引号(")还是单引号(')。
当字符序列不符合普通标识符的条件时,可以使用分隔标识符。 例如,这样的序列可能是 SQL 保留字,也可能以数字开头。 在限定标识符中,连续两个转义字符表示一个转义字符。 包含EBCDIC DBCS字符的分隔标识符还必须包含必要的转换字符。
顺序中的领先和嵌入式空白非常重要。 序列中的尾随空格并不重要。 分隔符的长度不包括起始和结束转义字符。 嵌入的转义字符(显示为两个字符)在长度统计中算作一个字符。
标识符的限制
请参阅 Db2 for z/OS 中的限制 ,了解长度限制 Db2 强加于标识符。
主机标识符
主机标识符是在主机程序中声明的名称。
主机标识符的构成规则就是主机语言的规则。 在非Java™程序中,不要使用以“ DB2 '、 'SQ'2、 'SQL'、'sql'、'RDI'或'DSN',因为预编译器生成的主变量名以这些字符开头。 在Java中,不要使用以 '__sJT_' 开头的名称。
分布式数据访问的标识符限制
Db2 对分布式访问的内部处理有时必须在CCSID之间转换 授权名称 、过程名称和架构名称的标识符。 如果这些标识符有可能用于分布式访问,则应将标识符限制为在统一码 UTF-8 中表示的代码点在0-127范围内的字符。 您无需以Unicode形式输入标识符;此限制仅适用于 Db2 内部执行的转换。