PolarDB for Oracle のストアドプロシージャ言語 (SPL) は、オブジェクトタイプおよびオブジェクトインスタンスを用いたオブジェクト指向プログラミングをサポートします。そのコア構成要素は、インスタンスの特性を記述する *属性* と、インスタンスに対して操作を行う *メソッド* です。
注意事項
データベースオブジェクトと SPL オブジェクト
本ドキュメントの他の箇所で使用される「データベースオブジェクト」という用語は、テーブル、ビュー、インデックス、ユーザーなどのデータベースエンティティを指します。一方、本トピックおよび「オブジェクトタイプとオブジェクト」以下の各トピックでは、「オブジェクトタイプ」と「オブジェクト」という用語は、オブジェクト指向プログラミングの概念を実装する SPL 固有のデータ構造を指します。
Oracle ADT との互換性
Oracle の PL/SQL では、オブジェクトタイプは抽象データ型 (ADT) と呼ばれます。SPL のオブジェクトタイプ実装は、Oracle ADT との互換性を意図して設計されています。ただし、PolarDB for Oracle では、オブジェクト指向プログラミング言語のすべての機能が実装されていません。本トピックでは、現在サポートされている機能のみを説明します。
基本概念
オブジェクト指向プログラミングは、「オブジェクト」という概念を中心に展開されます。「オブジェクト」とは、現実世界の実体(人物、場所、物など)を表すものです。ある種類の実体を一般的に定義したものを *オブジェクトタイプ* と呼びます。「ジョー」や「サリー」などの具体的な実例は、person オブジェクトタイプの *オブジェクトインスタンス* です。
すべてのオブジェクトタイプには、以下の 2 つのコンポーネントがあります:
属性:オブジェクトインスタンスの特定の特性を記述するフィールドです。
personオブジェクトタイプの場合、属性には氏名、住所、性別、生年月日、身長、体重、目の色、職業などが含まれる可能性があります。メソッド:オブジェクトに対して、またはオブジェクトに関連して実行される操作を提供する SPL プロシージャまたは関数です。
personオブジェクトタイプの場合、メソッドには人物の年齢を計算する処理、属性値を表示する処理、または属性値を更新する処理などが含まれる可能性があります。
属性
すべてのオブジェクトタイプには、少なくとも 1 つの属性を含める必要があります。属性のデータの型には、以下のいずれかを指定できます:
基本データの型(例:
NUMBER、VARCHAR2)他のオブジェクトタイプ
CREATE TYPE文でグローバルに定義されたコレクション型(ネストテーブルや varray など)
各オブジェクトインスタンスは、独自の属性値セットを持ちます。インスタンスが初めて作成された際、各属性は初期化され、その初期値は NULL となる場合があります。
メソッド
メソッドは、オブジェクトタイプ内で定義される SPL プロシージャまたは関数です。以下の 3 種類に分類されます:
メンバーメソッド
メンバーメソッドは、特定のオブジェクトインスタンスのコンテキスト内で動作します。インスタンスの属性にアクセスでき、それらを変更することも可能です。
スタティックメソッド
スタティックメソッドは、任意のオブジェクトインスタンスとは独立して動作します。インスタンスの属性にアクセスしたり、変更したりすることはできません。
コンストラクターメソッド
コンストラクターメソッドは、新しいオブジェクトインスタンスを作成します。オブジェクトタイプが定義される際に、常にデフォルトのコンストラクターメソッドが提供されます。
オーバーロードされたメソッド
オブジェクトタイプ内では、同一の種類(プロシージャまたは関数)でありながら、異なるシグネチャを持つ同名のメソッドを 2 つ以上定義することはできません。このようなメソッドを *オーバーロードされたメソッド* と呼びます。
メソッドのシグネチャは、以下の 3 つの要素によって決定されます:仮パラメーターの数、それら仮パラメーターのデータの型、およびその順序です。