SQLステートメントでオブジェクト型のプロパティまたはメソッドをインポートする場合、そのインポートを完全に限定するためにテーブルエイリアスを使用する必要があります。
次の例では、サンプルスキーマobにcust_addr_typ型とテーブルcustomersが含まれており、customersにはcust_addr_typ型の列cust_addressがあります。
CREATE TYPE cust_addr_typ
AS OBJECT
(street_address VARCHAR2(40),
postal_code VARCHAR2(10),
city VARCHAR2(30),
state_province VARCHAR2(10),
country_id CHAR(2));
/
CREATE TABLE customers
(customer_id NUMBER(6),
cust_first_name VARCHAR2(20) CONSTRAINT cust_fname_nn NOT NULL,
cust_last_name VARCHAR2(20) CONSTRAINT cust_lname_nn NOT NULL,
cust_address cust_addr_typ,
. . .)
SQLステートメントでは、postal_codeプロパティへのインポートは、次のようにテーブルエイリアスを使用して完全に限定する必要があります。
SELECT c.cust_address.postal_code
FROM customers c;
UPDATE customers c
SET c.cust_address.postal_code = '610000'
WHERE c.cust_address.city = 'chengdu'
AND c.cust_address.state_province = 'SICHUAN';
パラメータを受け取らないメンバー関数をインポートするには、空の括弧を指定する必要があります。たとえば、サンプルスキーマobにはcatalog_typに基づくオブジェクトテーブルcategory_tabが含まれており、このテーブルにはメンバー関数getCatalogNameが含まれています。このメソッドをSQLステートメントで呼び出すには、次のように空の括弧を指定する必要があります。
SELECT TREAT(VALUE(c) AS catalog_typ).getCatalogName() "Catalog Type"
FROM categories_tab c
WHERE category_id = 10;
実行結果は次のとおりです。
+----------------+
| Catalog Type |
+----------------+
| online catalog |
+----------------+