DOMAIN_NAME

目的

DOMAIN_NAMEは、exprに関連付けられたドメインの完全修飾名を戻します。exprがドメインに関連付けられている場合、NULLが戻されます。

複数列ドメインに対してDOMAIN_NAMEをコールする場合、exprのすべての値が同じドメインのものである必要があります。expr引数の数がドメイン列の数と異なる場合、またはドメイン内の順序が異なる場合、NULLを戻します。

次の例では、スキーマHRにドメインDAY_OF_WEEKを作成し、それを列HR.CALENDAR_DATES.DAY_OF_WEEK_ABBRに関連付けます。この列をDOMAIN_NAMEに渡すと、ドメインの完全修飾名が戻されます。

問合せは、文字列"MON"をDAY_OF_WEEKにキャストしてドメイン名を取得します。

DOMAIN_NAMEへのその他のすべてのコールは、NULLを戻します。

CREATE DOMAIN hr.day_of_week AS CHAR(3 CHAR);
CREATE TABLE hr.calendar_dates (
  calendar_date    DATE,
  day_of_week_abbr hr.day_of_week
);
INSERT INTO hr.calendar_dates 
VALUES(DATE'2023-05-01', 'MON');
SELECT day_of_week_abbr, 
       DOMAIN_NAME(day_of_week_abbr) domain_column, 
       DOMAIN_NAME(calendar_date) nondomain_column, 
       DOMAIN_NAME(CAST('MON' AS hr.day_of_week)) domain_value,
       DOMAIN_NAME('MON') nondomain_value
  FROM hr.calendar_dates;
  
DAY_OF_WEEK_ABBR DOMAIN_COLUMN  NONDOMAIN_COLUMN DOMAIN_VALUE   NONDOMAIN_VALUE    
---------------- -------------- ---------------- -------------- ---------------
MON              HR.DAY_OF_WEEK <null>           HR.DAY_OF_WEEK <null> 

次の例では、スキーマCOに複数列ドメインCURRENCYを作成します。CO.ORDER_ITEMSの列AMOUNTおよびCURRENCY_CODEがこのドメインに関連付けられています。

問合せでは、DOMAIN_NAMEの引数は、domain_cols式のドメイン定義にのみ一致します。これにより、ドメインの完全修飾名が戻されます。DOMAIN_NAMEに対する他のすべてのコールの引数とドメイン列が一致しないため、NULLが戻されます:

CREATE DOMAIN co.currency AS (
  amount        AS NUMBER(10, 2)
  currency_code AS CHAR(3 CHAR)
);
CREATE TABLE co.order_items (
  order_id      INTEGER,
  product_id    INTEGER,
  amount        NUMBER(10, 2),
  currency_code CHAR(3 CHAR),
  DOMAIN co.currency(amount, currency_code)
);
INSERT INTO co.order_items
VALUES (1, 1, 9.99, 'USD');
SELECT order_id,
       product_id,
       DOMAIN_NAME(amount, currency_code) domain_cols,
       DOMAIN_NAME(currency_code, amount) domain_cols_wrong_order,
       DOMAIN_NAME(order_id, product_id) nondomain_cols,
       DOMAIN_NAME(amount) domain_cols_subset
  FROM co.order_items
  ORDER BY domain_cols;
  
  ORDER_ID PRODUCT_ID DOMAIN_COLS     DOMAIN_COLS_WRONG_ORDER   NONDOMAIN_COLS  DOMAIN_COLS_SUBSET  
---------- ---------- --------------- ------------------------- --------------- --------------------
         1          1 CO.CURRENCY     <null>                    <null>          <null>