本ページでは、オブジェクト指向プログラミング技術をストアドプロシージャ言語 (SPL) で利用する方法について説明します。 Java や C++ などのプログラミング言語で見られるオブジェクト指向プログラミングは、オブジェクトの概念を軸としています。 オブジェクトは、人、場所、物などの実世界のエンティティの表現です。 人などの特定のオブジェクトの一般的な説明や定義は、オブジェクト型と呼ばれています。 「ジョー」や「サリー」などの特定の人々は、オブジェクト型 Person のオブジェクト、またはオブジェクト型 Person のインスタンスの同等、または単に Person オブジェクトです。

注意事項

本ページ上のここまでで使用したデータベースオブジェクトおよびオブジェクトという用語は、本ページおよび「オブジェクト型とオブジェクト」にあるその他のページで使用されているオブジェクト型やオブジェクトとは異なります。 これまでに使用されたこれらの用語は、テーブル、ビュー、インデックス、ユーザーなど、データベースに作成できるエンティティに関連します。 言及されているページの文脈内では、オブジェクト型とオブジェクトは、オブジェクト指向の概念を実装する SPL プログラミング言語でサポートされている特定のデータ構造を指します。

Oracle では、抽象データ型 (ADT) という用語は、PL/SQL のオブジェクト型を表すために使用されます。 オブジェクト型の SPL 実装は、Oracle ADT と互換性を持たせることを目的としています。

Oracle と互換性のある PolarDB データベースでは、オブジェクト指向プログラミング言語の一部の機能はサポートされていません。 本ページでは、サポートされている機能についてのみ説明します。

概念

オブジェクト型は、エンティティの説明または定義です。 このオブジェクト型の定義は、次の 2 つのコンポーネントで特徴付けられます。

  • 属性: オブジェクトインスタンスの独自の特性を説明するフィールド。 たとえば、人物オブジェクトの属性には、名前、住所、性別、生年月日、身長、体重、目の色、職業などが含まれます。
  • メソッド: オブジェクトに対して、またはオブジェクトに関連する何らかの型の関数または操作を実行するプログラム。 たとえば、人物オブジェクトのメソッドには、人物の年齢の計算、人物の属性の表示、および人物の属性に割り当てられた値の変更が含まれます。

属性

各オブジェクト型には、少なくとも 1 つの属性が含まれている必要があります。 属性のデータ型は、次のいずれかの型になります。

  • NUMBER や VARCHAR2 などの基本データ型
  • 別のオブジェクト型
  • 入れ子の表や VARRAY など、(CREATE TYPE 文によって作成された) グローバルに定義されたコレクション型

オブジェクトインスタンスが最初に作成されるときに、属性はその初期値を取得します。 初期値は NULL になることもあります。 各オブジェクトインスタンスには、独自の属性値のセットがあります。

メソッド

メソッドは、オブジェクト型内で定義された SPL プロシージャまたは関数です。 メソッドは、次の 3 つの一般的な型に分類できます。

  • メンバーメソッド: オブジェクトインスタンスのコンテキスト内で動作するプロシージャまたは関数。 メンバーメソッドでは、操作しているオブジェクトインスタンスの属性にアクセスして変更できます。
  • 静的メソッド: 特定のオブジェクトインスタンスから独立して動作するプロシージャまたは関数。 静的メソッドでは、オブジェクトインスタンスの属性にアクセスできず、属性を変更できません。
  • コンストラクターメソッド: オブジェクト型のインスタンスを作成するために使用される関数。 オブジェクト型が定義されると、デフォルトのコンストラクターメソッドが常に提供されます。

オーバーロードされたメソッド

オブジェクト型では、同じ型 (プロシージャまたは関数) でシグネチャが異なる 2 つ以上の同じ名前のメソッドを定義することはできません。 このようなメソッドは、オーバーロードされたメソッドと呼ばれます。

メソッドのシグネチャは、仮パラメーターの数、仮パラメーターのデータ型、およびそれらの順序で構成されます。