ORACLE官方SQL语言参考笔记之Oracle SQL的基本元素篇(第三章-第八节-数据库对象名称和限定符)

本文简述

此书下载方法:加入群技术交流群(免费)699712384,文件夹为ORACLE官方文档中 
CSDN技术网址 
简书技术网址 
ORACLE官网教程地址 
书名:

中文名:《SQL语言参考笔记》

英文名:《SQL Language Reference》

作者:二次猿

时间:阅读于2018年3月21日

准备工作:详情见:具体可以参考简书和二次猿公众号常用表

注意事项:跳过基本概念和非重要内容,重点举例说明,并且加粗,部分内容可能在其他章节会再次详细介绍,表格如果排版不美观,可以复制到excle进行直观展示,代码部分根据实际情况注释和说明



数据库对象名称和限定符

某些数据库对象由可以或必须命名的部分组成, 如表或视图中的列、索引和表分区和子分区、表上的完整性约束以及存储在包中的对象, 包括过程和存储功能。本节提供:

  • 命名数据库对象和数据库对象位置限定符的规则

  • 命名数据库对象和限定符的准则

注意:

oracle 使用系统生成的名称, 以 "SYS_" 开头, 用于隐式生成的数据库对象和子对象, 以及某些 Oracle 提供的对象以 "ORA_" 开头的名称.ORA_ Oracle 不鼓励您在显式提供给数据库对象和子对象的名称中使用这些前缀, 以避免名称解析中可能出现冲突。

数据库对象命名规则

每个数据库对象都有一个名称。在 SQL 语句中, 您表示具有带引号标识符nonquoted 标识符的对象的名称。.

  • 带引号的标识符以双引号 (") 开始和结束。如果使用带引号的标识符命名架构对象, 则在引用该对象时必须使用双引号。

  • nonquoted 标识符不被任何标点符号包围。

可以使用引用的或 nonquoted 的标识符来命名任何数据库对象。但是, 数据库名称、全局数据库名称和数据库链接名称始终不区分大小写, 并且存储为大写。如果将此类名称指定为带引号的标识符, 则会默默地忽略引号。有关命名用户和密码的其他规则, 请参阅创建用户

注意:

Oracle 不建议对数据库对象名称使用带引号的标识符。 这些引用的标识符由 SQL 加号接受, 但在使用管理数据库对象的其他工具时, 它们可能无效。

以下规则列表适用于带引号和 nonquoted 标识符, 除非另有说明:

  1. 名称必须是从1到30个字节长, 这些异常:

    • 数据库的名称限制为8字节。

    • 数据库链接的名称可以长达128字节。

    如果标识符包含多个由句点分隔的部分, 则每个属性最多可长达30个字节。每个句点分隔符以及任何周围的双引号都算作一个字节。例如, 假设您标识了如下的列:

    "schema"."table"."column"
    

    架构名称可以是30个字节, 表名可以是30个字节, 列名可以是30个字节。每个引号和句点都是单字节字符, 因此此示例中标识符的总长度最多可达98个字节。

  2. Nonquoted 标识符不能是 Oracle SQL 保留字。引用的标识符可以是保留字, 尽管不建议这样做。

    根据计划用于访问数据库对象的 Oracle 产品, 名称可能会进一步受其他特定于产品的保留字的限制。

    注意:

    保留字ROWID是此规则的一个例外。 不能将大写的ROWID(引用或 nonquoted) 用作列名。 但是, 您可以将大写字母用作非列名的带引号标识符, 并且可以使用包含一个或多个小写字母 (例如 "Rowid" 或 "rowid") 的单词作为任何带引号的标识符, 包括列名。

    另请参见:

    • "oracle sql 保留字"用于列出所有 Oracle sql 保留字

    • 特定产品的手册, 如 Oracle 数据库 PL/SQL 语言参考, 用于该产品的保留字列表

  3. Oracle SQL 语言包含具有特殊含义的其他单词。这些单词包括数据类型、架构名称、函数名、虚拟系统表DUAL和关键字 (SQL 语句中的大写字 (如DIMENSIONSEGMENTALLOCATEDISABLE等)。第四)。这些话是不保留的。但是, Oracle 以特定的方式在内部使用它们。因此, 如果将这些单词用作对象和对象部分的名称, 则 SQL 语句可能会更难阅读, 并可能导致不可预知的结果。

    特别是, 不要使用以SYS_ORA_开头的单词作为架构对象名称, 也不要使用 SQL 内置函数的名称作为架构对象或用户定义函数的名称。

    另请参见:

    • "Oracle SQL 关键字" , 了解如何获取关键字列表

    • "数据类型"关于 SQL 函数"从双表中选择"

  4. 应在数据库名称、全局数据库名称和数据库链接名称中使用 ascii 字符, 因为 ascii 字符可在不同平台和操作系统之间提供最佳兼容性。

  5. 可以在密码中包含多字节字符。

  6. Nonquoted 标识符必须以字母字符从数据库字符集开始。引用的标识符可以以任何字符开头。

  7. Nonquoted 标识符只能包含数据库字符集和下划线 (_)、美元符号 ($) 和英镑符号 (#) 中的字母数字字符。数据库链接还可以包含句点 (.) 和 "at" 标志 (@)。Oracle 强烈劝阻您在 nonquoted 标识符中使用 $ 和 #。

    带引号的标识符可以包含任何字符和标点标记以及空格。但是, 引用的或 nonquoted 的标识符都不能包含双引号或 null 字符 (\0).

  8. 在命名空间中, 没有两个对象可以同名。

    以下架构对象共享一个命名空间:

    • 专用同义词

    • 序列

    • 独立程序

    • 独立存储函数

    • 用户定义的运算符

    • 用户定义类型

    • 视图

    下面的每个架构对象都有自己的命名空间:

    • 集群

    • 约束

    • 数据库触发器

    • 尺寸

    • 指标

    • 物化视图 (创建实例化视图时, 数据库将创建同名的内部表。此表与架构中的其他表具有相同的命名空间。因此, 架构不能包含同名的表和实例化视图。

    • 专用数据库链接

    由于表和序列位于同一个命名空间中, 同一架构中的表和序列不能同名。但是, 表和索引位于不同的命名空间中。因此, 同一架构中的表和索引可以具有相同的名称。

    数据库中的每个架构都有其所包含对象的命名空间。例如, 这意味着不同架构中的两个表在不同的命名空间中, 并且可以具有相同的名称。

    下面的每个 nonschema 对象也都有自己的命名空间:

    • 版本

    • 参数文件 (PFILEs) 和服务器参数文件 (SPFILEs)

    • 配置 文件

    • 公用数据库链接

    • 公共同义词

    • 空间

    • 用户角色

    由于这些命名空间中的对象不包含在架构中, 因此这些命名空间跨越整个数据库。

  9. Nonquoted 标识符不区分大小写。甲骨文将其解释为大写。引用的标识符区分大小写。

    通过将名称括在双引号中, 可以为同一命名空间中的不同对象提供以下名称:

    "employees"
    "Employees"
    "EMPLOYEES"
    

    请注意, Oracle 将下列名称解释为相同, 因此它们不能用于同一命名空间中的不同对象:

    employees
    EMPLOYEES
    "EMPLOYEES"
    
  10. 当 Oracle 存储或比较大写的标识符时, 标识符中每个字符的大写形式通过应用数据库字符集的大写规则来确定。不考虑由会话设置NLS_SORT确定的特定于语言的规则。此行为对应于将 SQL 函数UPPER应用于标识符而不是函数NLS_UPPER.

    数据库字符集大写规则可以产生不正确的结果, 当被视为在某种自然语言中时。例如, 德语中使用的小写字母夏普 s ("ß") 没有根据数据库字符集大写规则的大写形式。当标识符转换为大写时, 它不会被修改, 而预期的大写形式是两个字符大写字母 S ("SS")。同样, 小写字母 i 的大写形式, 根据数据库字符集大写规则, 是大写字母 i。但是, 在土耳其和阿塞拜疆, 预期的大写形式是大写字母 I 随以上点。

    数据库字符集大写规则确保在会话的任何语言配置中都对标识符进行解释。如果希望标识符在某种自然语言中正确查找, 则可以引用它来保留小写形式, 或者在使用该标识符时可以使用语言正确的大写形式。

  11. 同一表或视图中的列不能同名。但是, 不同表或视图中的列可以同名。

  12. 如果同一包中包含的过程或函数的参数不相同, 则可以具有相同的名称。在具有不同参数的同一包中创建具有相同名称的多个过程或函数称为重载过程或函数。

架构对象命名示例

下面的示例是有效的架构对象名称:

last_name
horse
hr.hire_date
"EVEN THIS & THAT!"
a_very_long_and_valid_name

所有这些示例都遵循"数据库对象命名规则"中列出的规则。下面的示例无效, 因为它超过30个字符:

a_very_very_long_and_not_valid_name

虽然列别名、表别名、用户名和密码都不是对象或对象的一部分, 但它们也必须遵循这些命名规则, 除非规则中另有指定。

架构对象命名准则

以下是一些用于命名对象及其部分的有用指南:

  • 使用完整的、描述性的、简直念的名称 (或众所周知的缩写)。

  • 使用一致的命名规则。

  • 使用相同的名称在表中描述同一实体或属性。

在命名对象时, 应平衡保持名称简短和易于使用的目的, 以使名称尽可能具有描述性。如果有疑问, 请选择更具描述性的名称, 因为数据库中的对象可能会在一段时间内被许多人使用。您的对等方十年后可能难以理解具有pmdd名称的表列, 而不是payment_due_date.

使用一致的命名规则可以帮助用户了解每个表在应用程序中所扮演的角色。此类规则之一可能是使用fin_来开始属于FINANCE应用程序的所有表的名称。.

使用相同的名称在表中描述相同的内容。例如, 示例employeesdepartments表的部门编号列都命名为department_id.

猜你喜欢

转载自blog.csdn.net/huyingzuo/article/details/80334854