Hinweis:

SQL-Features in Oracle Database 23ai kennenlernen

Einführung

In diesem Tutorial lernen wir 10 Funktionen kennen, die Sie kennen müssen und wie sie mit ihren vorhandenen Gegenstücken verglichen werden. Folgende Features sind verfügbar:

Ziele

Voraussetzungen

Feature 1: Klausel FROM verwenden

Ein interessantes Feature, das in Oracle Database 23ai eingeführt wurde, ist die Optionalität der FROM-Klausel in SELECT-Anweisungen. Bis zu dieser Version war die FROM-Klausel erforderlich.

Im Folgenden finden Sie einige potenzielle Vorteile eines Features SELECT ohne FROM in Oracle Database 23ai.

Feature 2: Datentyp BOOLEAN verwenden

Oracle Database 23ai führt den neuen Datentyp BOOLEAN ein. Dabei werden echte boolesche Spalten/Variablen verwendet, anstatt sie mit einem numerischen Wert oder Varchar zu simulieren. Die Fähigkeit, boolesche Prädikate zu schreiben, vereinfacht die Syntax von SQL-Anweisungen.

  1. Erstellen Sie eine Tabelle mit dem Namen TEST_BOOLEAN.

    CREATE TABLE IF NOT EXISTS TEST_BOOLEAN (name VARCHAR2(100), IS_SLEEPING BOOLEAN);
    
    Table TEST_BOOLEAN created.
    
    Elapsed: 00:00:00.004
    
  2. Geben Sie Daten in die neue Tabelle ein. Der Wert IS_SLEEPING ist NOT NULL, der standardmäßig auf FALSE gesetzt ist.

    ALTER TABLE TEST_BOOLEAN modify (IS_SLEEPING boolean NOT NULL);
    

    Bild, das zeigt, wie boolescher Wert für SQL verwendet wird

    ALTER TABLE TEST_BOOLEAN modify (IS_SLEEPING default FALSE);
    
    Table TEST_BOOLEAN altered.
    
    Elapsed: 00:00:00.014
    

    Hier sehen Sie die verschiedenen Arten von booleschen Eingaben für Mick, Keith und Ron. Alle sind gültig. Bei Mick wird der Standardwert FALSE verwendet - Mick schläft nicht.

    1 row inserted.
    
    Elapsed: 00:00:00.006
    

    Für Keith wird ein NO-Wert verwendet - Keith schläft nicht.

    INSERT INTO TEST_BOOLEAN (name, is_sleeping) values ('Keith','NO');
    
    1 row inserted.
    
    Elapsed: 00:00:00.002
    

    Und für Ron verwenden wir einen 1 Wert - Ron schläft.

  3. Sehen Sie einige Ergebnisse basierend auf unseren booleschen Werten.

    SELECT * FROM test_boolean;
    

    Sie müssen sich nicht mehr daran erinnern, welche Art von booleschem System Sie eingeführt haben. Wie wir gezeigt haben, gibt die Verwendung von 0/1, True/False, Yes/No oder anderen gemeinsamen Eingaben einen genauen Tabellenwert zurück.

Feature 3: DDL-Klausel IF NOT EXISTS verwenden

Ab Oracle Database 23ai können Sie mit der neuen DDL-Klausel IF NOT EXISTS entscheiden, wie DDL-Fehler behandelt werden. Dadurch wird das DDL-Skripting vereinfacht, da potenzielle Fehler aufgrund vorhandener oder fehlender Objekte im Skripting ausgeblendet werden können.

  1. Testen Sie zunächst, ohne dieses neue Feature zu verwenden. Führen Sie die folgende Anweisung aus.

    DROP TABLE DEPT;
    

    Da keine vorhandene DEPT-Tabelle zum Löschen vorhanden ist, wird ein Fehler angezeigt: ORA-00942: table or view does not exist.

  2. In Oracle Database 23ai können wir DROP IF EXISTS jedoch ohne Fehler verwenden. Dies gibt uns Sicherheit, während wir Fehler vermeiden. Führen Sie jetzt dieselbe Anweisung aus, schließen Sie jedoch dieses neue IF EXISTS-Feature ein.

    DROP TABLE IF EXISTS DEPT;
    
  3. Ebenso können Sie mit dieser Funktion Tabellen erstellen, sofern diese noch nicht vorhanden sind. Erstellen Sie die Tabelle DEPT.

    CREATE TABLE IF NOT EXISTS DEPT
    	(DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
    	DNAME VARCHAR2(14) ,
    	LOC VARCHAR2(13) ) ;
    

    Bild zur Verwendung der IF [NOT] EXISTS-DDL-Klausel

  4. Mit dieser Funktion können Sie weitere Beispieltabellen in diesem Tutorial erstellen. Hier erstellen wir eine Mitarbeitertabelle mit dem Namen EMP.

    CREATE TABLE IF NOT EXISTS EMP
    (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
    ENAME VARCHAR2(10),
    JOB VARCHAR2(9),
    MGR NUMBER(4),
    HIREDATE DATE,
    SAL NUMBER(7,2),
    COMM NUMBER(7,2),
    DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
    
    Table EMP created.
    
    Elapsed: 00:00:00.006
    

Feature 4: INSERT für mehrere Zeilen verwenden

Eine weitere interessante Funktion, die eine bessere Koexistenz und Kompatibilität mit anderen häufig verwendeten Datenbankmanagementsystemen gewährleistet, ist die mehrwertige INSERT-Anweisung.

  1. In früheren Versionen der Oracle-Datenbank erforderte das Einfügen mehrerer Zeilen beispielsweise eine separate Insert-Anweisung für jede Zeile.

    INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
    INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
    INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
    INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
    INSERT INTO DEPT VALUES (50,'HR','LOS ANGELES');
    INSERT INTO DEPT VALUES (60,'IT','SAN FRANCISCO');
    INSERT INTO DEPT VALUES (70,'MANUFACTURING','DETROIT');
    

    In Oracle Database 23ai wurde die neue Syntax eingeführt, mit der alle diese Zeilen in eine einzelne INSERT-Anweisung eingefügt werden können. Sie können also mehrere Tupel in eine DML einfügen. Führen Sie die folgende Anweisung aus.

    INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK'),
    (20,'RESEARCH','DALLAS'),
    (30,'SALES','CHICAGO'),
    (40,'OPERATIONS','BOSTON'),
    (50,'HR','LOS ANGELES'),
    (60,'IT','SAN FRANCISCO'),
    (70,'MANUFACTURING','DETROIT');
    

    Bild zur Verwendung von multivalenten INSERTs

    Zusätzlich zu einer besseren Kompatibilität mit anderen Datenbanken kann diese Anweisung verwendet werden, um die Konsistenz einiger Einfügevorgänge im Auto-Commit-Modus sicherzustellen. Dies könnte beispielsweise für Oracle APEX-Anwendungen wichtig sein, die diesen Modus verwenden, um an Daten zu arbeiten.

  2. Führen Sie die folgende Anweisung aus, um dieses Feature zum Ausfüllen von Werten für die Tabelle EMP zu verwenden.

    INSERT INTO EMP VALUES
    (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20),
    (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30),
    (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30),
    (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20),
    (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30),
    (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30),
    (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10),
    (7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87')-85,3000,NULL,20),
    (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10),
    (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30),
    (7876,'ADAMS','CLERK',7788,to_date('13-JUL-87')-51,1100,NULL,20),
    (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30),
    (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20),
    (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
    

Feature 5: Neuen VALUE-Konstruktor verwenden

Ab der Oracle-Datenbank 23ai wurde der Konstruktor für Tabellenwerte erweitert. Sie kann jetzt in INSERT-Anweisungen verwendet werden, um mehrere Zeilen in einem einzigen Befehl zu erstellen. Sie kann auch in SELECT-Anweisungen und in der Syntax für die View-Faktorisierung verwendet werden. In diesem letzten Fall wird die Syntax der Anweisungen vereinfacht, und die Verwendung der Tabelle DUAL wird vermieden.

Die folgende Anweisung sieht wie eine Art Tabellenfunktion aus.

SELECT * FROM (VALUES (50,'HR'), (60,'DEV'), (70,'AI')) virt_dept (deptno, dname);

Bild zur Verwendung des neuen Tabellenwertkonstruktors

Feature 6: Aliasnamen in GROUP BY-Klausel verwenden

Oracle Database 23ai bietet die Möglichkeit, Aliasnamen in der GROUP BY-Klausel einer SELECT-Anweisung zu verwenden. Diese Funktion vereinfacht das Schreiben von Abfragen mit komplexen Ausdrücken und gewährleistet eine bessere Kompatibilität mit einigen anderen relationalen Datenbanken, wie Teradata, MySQL und PostgreSQL.

Beispiel:

SELECT to_char(hiredate,'YYYY') "Year", count(*)
FROM emp
GROUP BY to_char(hiredate,'YYYY');

In Oracle Database 23ai kann dies einfacher geschrieben werden, wie in der folgenden Abbildung dargestellt:

Bild, das zeigt, wie Aliasnamen in GROUP BY-Klausel verwendet werden

Feature 7: RETURNING-Klausel der Anweisung UPDATE und MERGE verwenden

Diese Klausel wurde bereits als Teil der EXECUTE IMMEDIATE-Anweisung implementiert. In Oracle Database 23ai können wir sie jedoch als Teil herkömmlicher, statischer DML-Anweisungen finden.

  1. In diesem Fall können alte und neue Werte von Spalten aus einer verarbeiteten Zeile abgerufen werden. Lassen Sie uns zunächst das aktuelle Gehalt von King sehen.

    SELECT ename, sal FROM emp WHERE ename = 'KING';
    
  2. Um Variablen in LiveSQL zu verwenden, werden Anweisungen in PL/SQL ausgeblendet. Führen Sie dieses Skript aus. Es erstellt zuerst die Variablen für altes und neues Gehalt und aktualisiert dann das Gehalt von King mit der RETURNING-Klausel, um unsere Variablen festzulegen. Wir werden uns dann die Ergebnisse ansehen.

    BEGIN
    	DECLARE
    		old_salary NUMBER;
    		new_salary NUMBER;
    	BEGIN
    		UPDATE emp
    		SET sal = sal + 1000
    		WHERE ename = 'KING'
    		RETURNING OLD sal, NEW sal INTO old_salary, new_salary;
    		DBMS_OUTPUT.PUT_LINE('Old Salary: ' || old_salary);
    		DBMS_OUTPUT.PUT_LINE('New Salary: ' || new_salary);
    	END;
    END;
    

    Bild zur Verwendung der RETURNING-Klausel der UPDATE- und MERGE-Anweisung

    Old Salary: 6000
    New Salary: 7000
    

    In diesem Beispiel wurde eine UPDATE-Anweisung verwendet. Die RETURNING-Klausel kann jedoch ähnlich mit MERGE-Anweisungen verwendet werden.

Feature 8: Joins in UPDATE und DELETE verwenden

Sie können Tabellendaten mithilfe von Joins aktualisieren, die auf Fremdtabellenbedingungen basieren. Unterauswahlen oder IN-Klausel sind nicht erforderlich.

  1. Führen Sie die folgende Anweisung aus, um die Gehaltsdaten des Mitarbeiters aus der Forschungsabteilung anzuzeigen.

    select e.sal, e.empno from emp e, dept d where e.deptno=d.deptno and d.dname='RESEARCH';
    
  2. Um die Gehaltsinformationen zu aktualisieren, müssen wir vor Oracle Database 23ai eine verschachtelte Anweisung verwenden.

    UPDATE emp e set e.sal=e.sal*2
    WHERE e.deptno in
    (SELECT d.deptno FROM dept d WHERE e.deptno=d.deptno
    and d.dname='RESEARCH');
    

    Mit Oracle Database 23ai können Sie sie wie folgt verwenden:

    UPDATE emp e set e.sal=e.sal*2  FROM dept d  WHERE e.deptno=d.deptno  and d.dname='RESEARCH';
    

    Bild zur Verwendung von Joins in UPDATE und DELETE

  3. Sie können sehen, dass das Gehalt erfolgreich aktualisiert wurde.

    select e.sal, e.empno from emp e, dept d where e.deptno=d.deptno and d.dname='RESEARCH';
    

    Bild zur Verwendung von Joins in UPDATE und DELETE

Feature 9: Annotationen verwenden

Anmerkungen sind optionale Metadaten für Datenbankobjekte. Eine Annotation ist entweder ein Name/Wert-Paar oder ein Name für sich. Der Name und der optionale Wert sind Freiformtextfelder. Eine Annotation wird als untergeordnetes Element des Datenbankobjekts dargestellt, dem die Annotation hinzugefügt wurde. Unterstützte Schemaobjekte sind Tabellen, Views, Materialized Views und Indizes. Mit Annotationen können Sie Metadaten zu Datenbankobjekten speichern und abrufen. Sie können damit Geschäftslogik und Benutzeroberflächen anpassen oder Metadaten für Metadaten-Repositorys bereitstellen. Sie kann mit der Anweisung CREATE oder ALTER auf Tabellen- oder Spaltenebene hinzugefügt werden.

Mit Annotationen können Sie Metadaten zu Datenbankobjekten speichern und abrufen. Sie können damit Geschäftslogik und Benutzeroberflächen anpassen oder Metadaten für Metadaten-Repositorys bereitstellen.

  1. Erstellen Sie eine annotierte Tabelle EMP_ANNOTATED_NEW mit Spalten- und Tabellenannotationen.

    CREATE TABLE emp_annotated_new
    	(empno number annotations(identity, display 'person_identity', details 'person_info'),
    	ename varchar2(50),
    	salary number annotations (display 'person_salary', col_hidden))
    	annotations (display 'employee_table');
    

    Bild zur Verwendung von Annotationen, neuen Metadaten für Datenbankobjekte

  2. Data Dictionary Views wie USER_ANNOTATIONS und USER_ANNOTATIONS_USAGE können dazu beitragen, die Nutzung zu überwachen.

    SELECT object_name, object_type, column_name, annotation_name, annotation_value FROM user_annotations_usage;
    

    Bild zur Verwendung von Annotationen, neuen Metadaten für Datenbankobjekte

Feature 10: SQL-Domains verwenden

Eine SQL-Domain ist ein Dictionary-Objekt, das zu einem Schema gehört und eine Gruppe optionaler Eigenschaften und Constraints kapselt und mit einer CREATE DOMAIN-Anweisung erstellt wird. Domains bieten Constraints, Anzeige-, Sortier- und Annotationsattribute. Nachdem Sie eine SQL-Domain definiert haben, können Sie Tabellenspalten definieren, die mit dieser Domain verknüpft werden sollen. Dadurch werden die optionalen Eigenschaften und Constraints der Domain explizit auf diese Spalten angewendet.

Mit SQL-Domains können Benutzer die beabsichtigte Verwendung für Spalten deklarieren. Es handelt sich um Data Dictionary-Objekte, damit abstrakte domänenspezifische Kenntnisse leicht wiederverwendet werden können.

  1. Erstellen Sie eine Domain namens yearbirth und eine Tabelle namens person.

    CREATE DOMAIN yearbirth as number(4)
    constraint check ((trunc(yearbirth) = yearbirth) and (yearbirth >= 1900))
    display (case when yearbirth < 2000 then '19-' ELSE '20-' end)||mod(yearbirth, 100)
    order (yearbirth -1900)
    annotations (title 'yearformat');
    

    Bild, das zeigt, wie leichte Objekttypen mit SQL-Domänen verwendet werden

    CREATE TABLE person
    (id number(5),
    name varchar2(50),
    salary number,
    person_birth number(4) DOMAIN yearbirth
    )
    annotations (display 'person_table');
    

    Bild, das zeigt, wie leichte Objekttypen mit SQL-Domänen verwendet werden

    ``beschriebene Person;

    Name Null? Typ


ID-NUMMER(5) NAME VARCHAR2(50) GEHALTSNUMMER PERSON_BIRTH ZAHL(4) DOMAIN JAHRGEBURT

Personenwerte INSERT (1,'MARTIN',3000, 1988);

2. With the new function `DOMAIN_DISPLAY` you can display the property.

SELECT DOMAIN_DISPLAY(person_birth) FROM person;


   ![Image showing how to use Light weight object types" with SQL Domains ](./images/Picture14.png "Light weight object types with SQL Domains")

3. Domain usage and annotations can be monitored with data dictionary views. Let us view `user_annotations_usage`.

WÄHLEN SIE * AUS user_annotations_usage;


   Define reusable domain types (lightweight objects).

DOMAIN EmailAddress ALS VARCHAR2(100) ERSTELLEN (REGEXP_LIKE(WERT, '^[^@]+@[^@]+.[^@]+[^@]+$'));

CREATE TABLE-Benutzer (user_id NUMBER, E-Mail EmailAddress ); ``

Bild, das zeigt, wie leichte Objekttypen mit SQL-Domänen verwendet werden

Einschränkungen und Einschränkungen in den Features von Oracle Database 23ai

Allgemeine Einschränkungen

Bestätigungen

Weitere Lernressourcen

Sehen Sie sich weitere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um ein Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.