オブジェクト型のインスタンスを作成する場合は、オブジェクト型の変数を宣言して、その宣言したオブジェクト変数を初期化する必要があります。 オブジェクト変数の宣言構文は次のとおりです。
object obj_type
ここで、object はオブジェクト変数に割り当てられた識別子、obj_type は事前に定義されたオブジェクト型の識別子です。
オブジェクト変数を宣言した後、コンストラクターメソッドを呼び出して、オブジェクトを値で初期化する必要があります。 コンストラクターメソッドは次の構文を使用して呼び出します。
[NEW] obj_type ({expr1 | NULL} [, {expr2 | NULL} ] [, ...])
ここで、obj_type はオブジェクト型のコンストラクターメソッドの識別子であり、コンストラクターメソッドは事前に宣言されたオブジェクト型と同じ名前を持っています。
expr1、expr2、... は、オブジェクト型の最初の属性、オブジェクト型の 2 番目の属性など、型と互換性のある式です。 属性がオブジェクト型の場合、対応する式は NULL、オブジェクトの初期化式、またはオブジェクト型を返す任意の式です。
次の無名ブロックは、変数を宣言して初期化します。
DECLARE
v_emp EMP_OBJ_TYPE;
BEGIN
v_emp := emp_obj_type (9001,'JONES',
addr_obj_type('123 MAIN STREET','EDISON','NJ',08817));
END;
変数 v_emp は、EMP_OBJ_TYPE という名前の事前に定義されたオブジェクト型で宣言されています。 ブロックの本体は、emp_obj_type コンストラクタ―および addr_obj_type コンストラクターを使用して変数を初期化します。
ブロックの本体にオブジェクトのインスタンスを作成する際、NEW キーワードを含めることができます。 NEW キーワードは、入力されたパラメーターとシグネチャーが一致するオブジェクトコンストラクターを呼び出します。
次の例では、mgr と emp という 2 つの変数を宣言しています。 どちらの変数も EMP_OBJ_TYPE です。mgr は宣言時に初期化され、emp は宣言時に NULL で初期化され、本文で値が割り当てられます。
DECLARE
mgr EMP_OBJ_TYPE := (9002,'SMITH',NULL);
emp EMP_OBJ_TYPE;
BEGIN
emp := NEW EMP_OBJ_TYPE (9003,'RAY',NULL);
END;
Oracle 互換 PolarDB データベースでは、コンストラクターメソッドの代わりに次の構文を使用できます。
[ ROW ] ({ expr1 | NULL } [, { expr2 | NULL } ] [, ...])
ROW キーワードは、括弧で囲まれたコンマ区切りのリスト内に 2 つ以上の式を指定する場合は省略可能です。 式を 1 つだけ指定する場合は、ROW キーワードを指定する必要があります。