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 |
+----------------+