型コンストラクタ式
型コンストラクタ式は、コンストラクタ・メソッドへのコールを指定します。型コンストラクタの引数は、任意の式です。型コンストラクタは、ファンクションが起動されるすべての場所で起動できます。
type_constructor_expression::=
NEW
キーワードは、コレクション型ではなくオブジェクト型のコンストラクタに適用されます。これによって、適切なコンストラクタを起動して新しいオブジェクトを作成するようにOracleに指示します。NEW
キーワードはオプションですが、指定することをお薦めします。
type_name
がオブジェクト型の場合、式は順序リストで、その最初の引数の値の型がオブジェクト型の最初の属性と一致し、2番目の引数の値の型がオブジェクト型の2番目の属性と一致し、以降同様に続く必要があります。コンストラクタの引数の合計数は、オブジェクト型の属性の合計数と一致する必要があります。
type_name
がVARRAY型またはネストした表型の場合、式のリストには0個以上の引数を含めることができます。引数が0個の場合は、空コレクションの構造であることを示します。それ以外の場合は、各引数が、型がコレクション型の要素型である要素値に対応します。
型コンストラクタの起動の制限事項
型コンストラクタ・メソッドの起動では、オブジェクト型に1000以上の属性がある場合でも、指定できるパラメータの数(expr
)は最大で999です。この制限は、コンストラクタがSQLからコールされる場合にのみ適用されます。PL/SQLからコールされる場合には、PL/SQLの制限が適用されます。
関連項目:
コンストラクタ・メソッドの詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。型コンストラクタへのコールに関するPL/SQLの制限の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
式の例
次の例では、サンプル・スキーマoe
のcust_address_typ
型を使用して、コンストラクタ・メソッドへのコールに含まれる式の使用方法を示します(PL/SQLはイタリック体で示しています)。
CREATE TYPE address_book_t AS TABLE OF cust_address_typ; DECLARE myaddr cust_address_typ := cust_address_typ( '500 Oracle Parkway', 94065, 'Redwood Shores', 'CA','USA'); alladdr address_book_t := address_book_t(); BEGIN INSERT INTO customers VALUES ( 666999, 'Joe', 'Smith', myaddr, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); END; /
副問合せの例
次の例では、サンプル・スキーマoe
のwarehouse_typ
型を使用して、コンストラクタ・メソッドへのコールに含まれる副問合せの使用方法を示します。
CREATE TABLE warehouse_tab OF warehouse_typ; INSERT INTO warehouse_tab VALUES (warehouse_typ(101, 'new_wh', 201)); CREATE TYPE facility_typ AS OBJECT ( facility_id NUMBER, warehouse_ref REF warehouse_typ); CREATE TABLE buildings (b_id NUMBER, building facility_typ); INSERT INTO buildings VALUES (10, facility_typ(102, (SELECT REF(w) FROM warehouse_tab w WHERE warehouse_name = 'new_wh'))); SELECT b.b_id, b.building.facility_id "FAC_ID", DEREF(b.building.warehouse_ref) "WH" FROM buildings b; B_ID FAC_ID WH(WAREHOUSE_ID, WAREHOUSE_NAME, LOCATION_ID) ---------- ---------- --------------------------------------------- 10 102 WAREHOUSE_TYP(101, 'new_wh', 201)