Oracle 的面向对象特性2025年4月6日 | 阅读 7 分钟 在本文中,我们将详细解释 Oracle 的面向对象特性的概念。 引言Oracle 目前是最广泛使用的 RDBMS 之一,为数据库应用程序提供了高效的解决方案。它负责精确地存储和高效地获取数据以响应用户查询。它提供了各种软件,专为当今以互联网速度运行的业务而设计。 如今,大多数商业 RDBMS 都已扩展其数据库系统,以包含面向对象的关键特性。 这些特性包括用新的数据类型扩展现有数据类型,包括
让我们逐一详细讨论。 对象类型 它也被称为抽象类型。这些是由用户定义的数据类型,拥有一种或多种子类型。 它们用于授权用户定义复杂的数据类型结构,该结构包含许多不同的元素,其中每个元素都使用 Oracle 产品中提供的基础数据类型之一。与通用数据类型不同,对象类型具有与之关联的属性和方法,以及操作属性所需的方法。 与其他模式对象一样,对象类型也具有名称、属性和方法。您可以像使用更熟悉的 NUMBER 或 VARCHAR2 数据类型一样使用它们。 CREATE TYPE 命令 对象类型由用户使用 Create Type 语句创建,并作为 Oracle 数据类型(如 Varchar2)存储在数据库中。 Create Type 语句使用以下语法 在以上语法中,“or replace”是可选的。有了这个额外的语句,同名的对象将自动被替换为对象类型的最新版本。 在定义完所有属性后,可以指定成员函数或过程。应记住,成员函数或过程的规范包含在类型定义中。这些函数或过程的实现是使用 CREATE TYPE BODY 语句单独完成的。除此之外,还可以包含一个或多个 pragmas 或编译器指令。这些有助于对函数或过程施加某些限制,例如限制函数或过程更新数据库等。 以下示例创建了一个名为 person_name_type 的用户定义对象类型,用于表示一个人的名字,包括名字和姓氏。 类型已创建 执行此 SQL 语句后,一个新的数据库类型和对象类型将存储在系统中。fname 和 lname 是 person_name_type 的属性。此语句仅创建对象类型,类似于 C 结构定义,但尚未创建该类型的任何对象。为此,我们需要创建一个表,其行或列可以保存对象。 以下示例创建了一个名为 employee 的表,其中包含三个列:empid、ename 和 salary。 执行此 sql 语句后,该表仍然为空,因此我们仍然没有创建 person_name_type 类型的任何对象。但是,当我们向表中插入行时,ename 列的值将采用 person_name_type 类型对象的值。 例如 Insert into employee (empid, ename and salary) values (101, person_name_type ('Anand', 'Sharma'), 24000); 插入行后,如果您想访问 employee 表的 ename 对象列中的属性,请在引用对象类型内的列时,通过在属性名前加上列名,并通过在列名前加上相关变量来完全限定数据库属性。 以下语句 从 employee 表检索行。 您可以使用以下语句删除对象类型。 请记住,您不能删除或替换具有表或其他类型的类型。 对象方法除了属性之外,您还可以在创建对象类型时定义方法。方法是用户在对象定义中声明的函数,用于应用您希望该类别对象执行的行为。成员、静态和构造函数是可以在类型定义中声明的常见方法类型。在创建方法时,使用 create type body 语句。在创建方法的体之前,必须在数据类型声明中命名方法,如下所示: 要定义 get_name 函数,请使用 create type body 语句。 然后,如前所述,创建 employee 表。 集合Oracle 支持两种集合数据类型,用于模拟多值属性和多对多关系,如下所示:
它可以用作其他数据类型的替代品。您还可以拥有集合类型的对象属性,以及集合类型的列。 例如,您可以为 Sales Order 对象类型提供一个嵌套表属性,以保存给定销售订单的行项目集合。 Varray(变长数组)它存储一组具有相同类型的有序元素。该类型可以是数据库类型或用户定义的对象类型。它允许在一个行内存储属性的多个值。在定义类型时,必须指定允许的最大值数。可以使用以下 create type 语句创建变长数组。 在此,type_name 是为类型指定的名称,limit 是允许其中的值的最大数量,数据类型可以是任何有效的 Oracle 类型。 以下示例创建了一个名为 t_varray_phones 的类型,它可以存储多达 5 个 varchar2(20) 字符串。 嵌套表它存储一组无序的任意数量的元素。与单独的数组不同,您可以插入、修改和删除嵌套表中的单个元素集。 嵌套表没有最大大小,您可以在嵌套表中每行存储无限数量的条目。 例如:您将看到一个存储 address_info 对象类型的嵌套表类型。 您使用 create type 语句创建嵌套表类型,以下示例创建了一个名为 table_address 的类型,它存储 address_info 对象。 对象表对象表是一种特殊类型的表,其中每一行代表一个对象。一旦定义了对象类型,就可以创建该对象类型的表。 例如,给定的语句创建了一个对象类型。 您可以通过以下方式来看待此表
例如:以下是可以实现的说明 Insert 查询将一个 person_type 对象插入 per_obj_table,并将 person_table 视为多列表。Select 查询从 per_obj_table 中作为单列表进行选择,并使用 VALUE 函数返回对象实例作为行。 默认情况下,对象表中的每个行对象都有一个相关的逻辑对象标识符,该标识符在对象表中唯一地标识它。系统生成的唯一标识符允许 Oracle 在分布式和复制环境中清晰地标识对象。 引用它是一个 Oracle 内置数据类型,是一个指向行对象的逻辑指针,该行对象由引用对象的对象标识符构建而成。REF 模型对象之间的关联集合,特别是多对一关系,因此减少了对外键的需求。REF 提供了一种轻松遍历对象的方法。您可以使用点表示法来跟踪指针。Oracle 会在必要时为您进行连接,并在某些情况下避免连接。 您可以使用 REF 来更新或检查它引用的对象。您还可以使用 REF 来获取它引用的对象。您可以更改 REF,使其指向同一对象类型层次结构中的另一个对象,或为其分配 null 值。 通过从其对象表中选择一个行对象并实现 REF 操作符来获取 REF。 例如 解引用 REFREF 函数将行对象作为其参数,并返回一个引用值。另一方面,DEREF 函数接受引用值并返回行对象的值。 下一个主题Oracle 面试 |
我们请求您订阅我们的新闻通讯以获取最新更新。