1. Start
  2. Unternehmen
  3. Blog
  4. Oracle 23ai New Feature: Domains

Oracle 23ai New Feature: Domains

Überblick

In diesem Blogbeitrag werden Domains vorgestellt, die mit Oracle 23ai neu eingeführt wurden. Es handelt sich dabei um Vorlagen für Eigenschaften von Spalten, die den Entwurf des Datenmodells vereinheitlichen und vereinfachen.
Diese Funktionalität wird auf einer Oracle Datenbank 23ai FREE demonstriert.

Ausgangssituation

Die Anwendung von Domains soll am Beispiel der Spalte EMPLOYEES.COMMISSION_PCT (Provision) im Schema HR gezeigt werden. Diese Spalte hat den Datentyp NUMBER(2,2) und keine Prüfregeln.

 

desc employees

Name           Null?    Typ          
-------------- -------- ------------ 
EMPLOYEE_ID    NOT NULL NUMBER(6)    
FIRST_NAME              VARCHAR2(20) 
LAST_NAME      NOT NULL VARCHAR2(25) 
...
COMMISSION_PCT          NUMBER(2,2)  
...

Definition von Regeln

Als Voraussetzung für die Definition von Domains muss das Systemprivileg CREATE DOMAIN erteilt worden sein.

Im Beispiel wird eine Domain mit folgenden Regeln erstellt:
- Wertebereich zwischen 0.01 und 0.5
- formatierte Anzeige
- Sortierung

Diese Domain wird einer Spalte zugewiesen.

 

-- falls die Domain COMMISSION_D bereits vorhanden ist

drop domain commission_d force;

create domain commission_d as number(2,2)
              constraint commission_valid check ( commission_d is null or commission_d between 0.01 and 0.5 )
              display 'Provision ' || to_char( nvl( commission_d, 0), '0D99')
              order nvl( commission_d, 0);

-- Domain COMMISSION_D erstellt.

alter table employees modify ( commission_pct domain commission_d);

-- Table EMPLOYEES geändert.

 

Der Name der Domain wird an Stelle des späteren Spaltennamens als Platzhalter verwendet.

Testen und Analysieren der Prüfregeln

Die Check Regel verhindert die Eingabe fehlerhafter Daten.

 

update employees 
set    commission_pct = 0.7
where  employee_id = 165;

-- ORA-11534: Check Constraint (HR.SYS_C009148) aufgrund von Domain-Constraint HR.COMMISSION_VALID von Domain HR.COMMISSION_D verletzt

 

Im nächsten Schritt sind die formatierte Ausgabe (domain_display) und Sortierung (domain_order) zu sehen.

 

select   last_name, domain_display( commission_pct)
from     employees
order by domain_order( commission_pct) desc;

LAST_NAME DOMAIN_DISPLAY 
--------- --------------- 
Singh     Provision  0,40
McEwen    Provision  0,35
Sully     Provision  0,35
King      Provision  0,35

 

Die Eigenschaften der Domains können in verschiedenen Data Dictionary Views analysiert werden.

 

select  *
from    user_domains
where   name = 'COMMISSION_D';

-- Prüfregeln

select  *
from    user_domain_constraints
where   domain_name = 'COMMISSION_D';

-- Spalten

select  *
from    user_domain_cols
where   domain_name = 'COMMISSION_D';

-- und es gibt auch einige built-in Domains ...

select  *
from    all_domains
where   builtin = 1;

 

Domains können auch geändert werden, allerdings nur die Eigenschaften Display und Order. Die Eigenschaft Constraint in Domains ist hingegen nicht änderbar. Soll also in unserem Fall die Check Clause geändert werden, so muss die Domain gelöscht (mit Force), dann neu angelegt und den betreffenden Spalten neu zugewiesen werden.

 

alter domain commission_d modify display to_char( commission_d, '0D99');

-- geänderte Anzeige testen

select  last_name,
        domain_display( commission_pct)
from    employees
order by
        domain_order( commission_pct) desc;

LAST_NAME DOMAIN_DISPLAY 
--------- --------------- 
Singh      0,40
McEwen     0,35
Sully      0,35
King       0,35

Zusammenfassung

Domains in Oracle 23ai vereinfachen die Verwaltung von Eigenschaften von Spalten. Besonders lohnenswert ist die Anwendung von Domains für Spalten gleichen Inhalts, die mehrfach im Datenmodell vorkommen.

Übrigens: Unser Kurs Praxisworkshop Oracle Datenbank 23c SQL Free bietet noch mehr Informationen zu den neuen SQL-Features der Oracle Datenbank 23ai.

Kommentare

Keine Kommentare

Kommentar schreiben

* Diese Felder sind erforderlich