DOMAIN_DISPLAY

Purpose

DOMAIN_DISPLAY returns expr formatted according to the domain's display expression. This returns NULL if the arguments are not associated with a domain or the domain has no display expression.

When calling DOMAIN_DISPLAY for multicolumn domains, all values of expr should be from the same domain. It returns NULL if the number of expr arguments are different from the number of domain columns or they are in a different order in the domain.

To get the display expression for a non-domain value, cast expr to the domain type. This is only possible for single column domains.

See Also:

Examples

The following example creates the domain DAY_OF_WEEK and associates it with the column CALENDAR_DATES.DAY_OF_WEEK_ABBR. Passing this column to DOMAIN_DISPLAY returns it with the first letter of each word capitalized and all other letters in lowercase. DOMAIN_DISPLAY also returns this format when casting a string to the domain.

All other calls to DOMAIN_DISPLAY pass non-domain values, so return NULL.

CREATE DOMAIN day_of_week AS CHAR(3 CHAR)
  DISPLAY INITCAP(day_of_week);
CREATE TABLE calendar_dates (
  calendar_date DATE,
  day_of_week_abbr day_of_week
);
INSERT INTO calendar_dates 
VALUES(DATE'2023-05-01', 'MON'), 
      (DATE'2023-05-02', 'tue'), 
      (DATE'2023-05-05', 'fRI');
SELECT day_of_week_abbr, 
       DOMAIN_DISPLAY(day_of_week_abbr) domain_column, 
       DOMAIN_DISPLAY(calendar_date) nondomain_column,
       DOMAIN_DISPLAY(CAST('MON' AS day_of_week)) domain_value, 
       DOMAIN_DISPLAY('MON') nondomain_value
  FROM calendar_dates;

DAY_OF_WEEK_ABBR DOMAIN_COLUMN NONDOMAIN_COLUMN DOMAIN_VALUE NONDOMAIN_VALUE
---------------- ------------- ---------------- ------------ ---------------
MON              Mon           <null>           Mon          <null>         
tue              Tue           <null>           Mon          <null>             
fRI              Fri           <null>           Mon          <null> 

The following example creates the multicolumn domain CURRENCY with a display expression. The columns AMOUNT and CURRENCY_CODE in ORDER_ITEMS are associated with this domain.

In the query, only the domain_cols expression formats the columns according to the domain expression. All other calls to DOMAIN_DISPLAY have a mismatch between its arguments and the domain columns so return NULL:

CREATE DOMAIN currency AS (
  amount        AS NUMBER(10, 2)
  currency_code AS CHAR(3 CHAR)
)
DISPLAY CASE currency_code
  WHEN 'USD' THEN '$'
  WHEN 'GBP' THEN '£'
  WHEN 'EUR' THEN '€'
  WHEN 'JPY' THEN '¥'
END || TO_CHAR(amount, '999,999,999.00');
CREATE TABLE order_items (
  order_id      INTEGER,
  product_id    INTEGER,
  amount        NUMBER(10, 2),
  currency_code CHAR(3 CHAR),
  DOMAIN currency(amount, currency_code)
);
INSERT INTO order_items
VALUES (1, 1,    9.99, 'USD'),
       (2, 2, 1234.56, 'GBP'),
       (3, 3, 4321,    'EUR'),
       (4, 4, 3141592, 'JPY');
SELECT order_id,
       product_id,
       DOMAIN_DISPLAY(amount, currency_code) domain_cols,
       DOMAIN_DISPLAY(currency_code, amount) domain_cols_wrong_order,
       DOMAIN_DISPLAY(order_id, product_id) nondomain_cols,
       DOMAIN_DISPLAY(amount) domain_cols_subset
  FROM order_items;
  
  ORDER_ID PRODUCT_ID DOMAIN_COLS      DOMAIN_COLS_WRONG_ORDER NONDOMAIN_COLS DOMAIN_COLS_SUBSET
---------- ---------- ---------------- ----------------------- -------------- ------------------
         1          1 $           9.99 <null>                  <null>         <null>            
         2          2 £       1,234.56 <null>                  <null>         <null>            
         3          3 €       4,321.00 <null>                  <null>         <null>            
         4          4 ¥   3,141,592.00 <null>                  <null>         <null>