Remarques :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction à Oracle Cloud Infrastructure Free Tier.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. Lorsque vous terminez votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
Découvrir les fonctionnalités SQL dans Oracle Database 23ai
Introduction
Nous allons découvrir 10 fonctionnalités de ce tutoriel que vous devez connaître et comment elles se comparent à leurs homologues existantes. Ces fonctionnalités sont les suivantes :
- Clause
FROM
(facultatif). BOOLEAN
pour SQL.IF NOT EXISTS
Clause LDD (langage de définition de données).INSERT
à valeurs multiples.- Nouveau constructeur de table
VALUE
. - Alias dans la clause
GROUP BY
. - Clause
RETURNING
des instructionsUPDATE
etMERGE
. - Jointures dans
UPDATE
etDELETE
. - Annotations, nouvelles métadonnées pour les objets de base de données.
- Types d'objet légers avec domaines SQL.
Objectifs
-
Utiliser SQL sans la clause
FROM
: activez les requêtes plus simples en supprimant la nécessité d'utiliser la clauseFROM
lors de la sélection d'expressions ou de fonctions intégrées. -
Implémenter le type de données
BOOLEAN
natif en SQL : tirez parti du type de donnéesBOOLEAN
natif dans les tables, les requêtes et les conditions SQL pour un traitement plus intuitif de la logique True/False. -
Utilisation de
IF NOT EXISTS
dans des instructions LDD : simplifiez la logique de création et de suppression d'objets en exécutant de manière conditionnelle des instructionsCREATE
etDROP
sans vérifications PL/SQL supplémentaires. -
Effectuer des opérations
INSERT
à valeurs multiples : insérez plusieurs lignes dans une instructionINSERT
unique pour améliorer la lisibilité du code et réduire les allers-retours vers la base de données. -
Utiliser le constructeur de valeur de table pour les ensembles de données en ligne : créez des ensembles de lignes temporaires directement dans SQL à l'aide du constructeur
VALUES
, en prenant en charge des opérations telles queMERGE
,SELECT
ou la comparaison. -
Alias de colonne de référence dans les clauses GROUP BY : améliorez la lisibilité des requêtes en autorisant l'utilisation d'alias
SELECT
dansGROUP BY
au lieu de répéter des expressions. -
Tirer parti de la clause
RETURNING
dansUPDATE
etMERGE
: extraire les données affectées directement à partir des instructionsUPDATE
etMERGE
sans avoir besoin d'une requête de suivi. -
Exécution de jointures dans les instructions
UPDATE
etDELETE
: utilisez la logiqueJOIN
directement dans les opérationsUPDATE
etDELETE
pour modifier ou enlever des enregistrements en fonction des conditions de table associées. -
Annoter des objets de base de données avec des métadonnées : documentez les objets de base de données à l'aide de
ANNOTATION
afin de stocker des métadonnées descriptives (par exemple, le propriétaire, la fonction) pour faciliter la maintenance et l'introspection. -
Définir des types d'objet léger à l'aide de domaines SQL : créez des types de domaine réutilisables avec des contraintes pour assurer la cohérence et le typage fort entre plusieurs tables.
Prérequis
-
Connaissance de base du langage SQL.
-
Comprenez la syntaxe SQL :
SELECT
,INSERT
,UPDATE
,DELETE
,JOIN
,GROUP BY
, etc. -
Bonne connaissance des concepts et des types de données des bases de données relationnelles.
-
-
Expérience d'Oracle Database 23ai et de ses versions précédentes.
-
Connaissance du fonctionnement du langage DDL, du langage DML et du langage PL/SQL dans Oracle Database 19c, Oracle Database 21c et les versions antérieures.
-
Connaissance des fonctionnalités propres à Oracle telles que
DUAL
,MERGE
,RETURNING INTO
, etc.
-
-
Accès à l'environnement Oracle Database 23ai.
-
Vous avez accès à Oracle Database 23ai (configuration locale, instance cloud ou Oracle Live SQL).
-
Certaines fonctionnalités (comme les domaines SQL ou
BOOLEAN
) ne fonctionnent que dans Oracle Database 23ai.
-
-
Outils SQL*Plus, SQLcl ou GUI (comme SQL Developer ou DataGrip). Capable d'exécuter et de tester des instructions SQL dans une interface compatible.
-
Principes de base du langage PL/SQL (pour les fonctionnalités avancées). Pour l'utilisation de
RETURNING INTO
, les blocs procéduraux et la gestion du code SQL dynamique. -
Connaissance des contraintes et des règles d'intégrité des données. Nécessité de comprendre les domaines SQL et les contraintes de table.
-
Connaissance des vues du dictionnaire de données Oracle. Pour interroger des annotations ou des métadonnées. Par exemple,
USER_TABLES
,USER_ANNOTATIONS
. -
Rôle et privilèges dans Oracle Database. La possibilité de créer/modifier des tables, des domaines et des annotations requiert des privilèges utilisateur appropriés.
-
Connaissance de la version. Assurez-vous que vos outils et vos clients prennent en charge les fonctionnalités d'Oracle Database 23ai (les anciens pilotes ou outils peuvent échouer).
-
(Facultatif) Exposition à d'autres dialectes SQL modernes (PostgreSQL, MySQL, etc.). Cela vous aidera à apprécier la compatibilité croisée des nouvelles fonctionnalités telles que
VALUES
,BOOLEAN
etIF EXISTS
.
Fonctionnalité 1 : utiliser la clause FROM
Une fonctionnalité intéressante introduite dans Oracle Database 23ai est l'optionalité de la clause FROM
dans les instructions SELECT
. Jusqu'à cette version, la clause FROM
était requise.
Voici quelques avantages potentiels d'une fonctionnalité SELECT
sans FROM
dans Oracle Database 23ai.
-
Sélectionnez la date du jour pour faciliter la manipulation des données.
SELECT CURRENT_DATE;
-
Opérations ou calculs mathématiques sans données de table.
SELECT 25.50*25.25; 25.50*25.25 ----------- 643.875 Elapsed: 00:00:00.002 1 rows selected.
-
Bloc PL/SQL sans clause
FROM
.CREATE SEQUENCE empno_seq INCREMENT BY 1 START WITH 1 MINVALUE 1 MAXVALUE 1000; Sequence EMPNO_SEQ created. Elapsed: 00:00:00.005 declare v1 number; begin select empno_seq.nextval into v1; dbms_output.put_line ('v1= '||v1); end; / v1= 1 PL/SQL procedure successfully completed. Elapsed: 00:00:00.009
-
Fonctions intégrées ou définies par l'utilisateur pour effectuer des opérations ou extraire des valeurs.
SELECT DBMS_RANDOM.VALUE() as random_number;
-
Manipulations ou conversions de chaînes sans s'appuyer sur les données de table.
SELECT UPPER('oracle') AS uppercase_text;
-
Expressions conditionnelles ou logiques sans utiliser de table.
SELECT CASE WHEN 10 > 5 THEN 'True' ELSE 'False' END AS result;
Fonctionnalité 2 : utiliser le type de données BOOLEAN
Oracle Database 23ai introduit le nouveau type de données BOOLEAN
. Cela tire parti de l'utilisation de vraies colonnes/variables booléennes, au lieu de les simuler avec une valeur numérique ou Varchar. La possibilité d'écrire des prédicats booléens simplifie la syntaxe des instructions SQL.
-
Créez une table nommée
TEST_BOOLEAN
.CREATE TABLE IF NOT EXISTS TEST_BOOLEAN (name VARCHAR2(100), IS_SLEEPING BOOLEAN); Table TEST_BOOLEAN created. Elapsed: 00:00:00.004
-
Entrez les données dans la nouvelle table. La valeur
IS_SLEEPING
seraNOT NULL
définie surFALSE
par défaut.ALTER TABLE TEST_BOOLEAN modify (IS_SLEEPING boolean NOT NULL);
ALTER TABLE TEST_BOOLEAN modify (IS_SLEEPING default FALSE); Table TEST_BOOLEAN altered. Elapsed: 00:00:00.014
Ici, vous pouvez voir les différents types d'entrée booléenne pour Mick, Keith et Ron. Tous sont valides. Pour Mick, la valeur par défaut FALSE est utilisée : Mick n'est pas en sommeil.
1 row inserted. Elapsed: 00:00:00.006
Pour Keith, nous utilisons une valeur NO : Keith ne dort pas.
INSERT INTO TEST_BOOLEAN (name, is_sleeping) values ('Keith','NO'); 1 row inserted. Elapsed: 00:00:00.002
Et pour Ron, nous utilisons une valeur de 1 : Ron dort.
-
Consultez des résultats basés sur nos valeurs booléennes.
SELECT * FROM test_boolean;
Vous n'avez plus besoin de vous rappeler quel type de système booléen vous avez mis en place. Comme nous l'avons montré, l'utilisation de 0/1, True/False, Yes/No ou toute autre entrée commune renverra une valeur de table précise.
Fonctionnalité 3 : Utiliser la clause LDD IF NOT EXISTS
A partir d'Oracle Database 23ai, la nouvelle clause LDD IF NOT EXISTS
permet de décider de la façon dont les erreurs LDD seront gérées. Cela simplifie le script LDD, car les erreurs potentielles dues à l'existence ou à l'inexistence d'objets peuvent être masquées dans le script.
-
Tout d'abord, testez sans utiliser cette nouvelle fonctionnalité. Exécutez l'instruction suivante.
DROP TABLE DEPT;
Etant donné qu'aucune table
DEPT
existante ne doit être supprimée, une erreur est survenue :ORA-00942: table or view does not exist
. -
Cependant, dans Oracle Database 23ai, nous pouvons utiliser
DROP IF EXISTS
sans erreur. Cela nous donne la tranquillité d'esprit tout en évitant les erreurs. Exécutez à présent la même instruction, mais incluez cette nouvelle fonctionnalitéIF EXISTS
.DROP TABLE IF EXISTS DEPT;
-
De même, nous pouvons utiliser cette fonctionnalité pour créer des tables, si elles n'existent pas déjà. Créez cette table
DEPT
.CREATE TABLE IF NOT EXISTS DEPT (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, DNAME VARCHAR2(14) , LOC VARCHAR2(13) ) ;
-
Utilisez cette fonctionnalité pour créer d'autres exemples de table tout au long de ce tutoriel. Ici, nous allons créer une table d'employés nommée
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
Fonctionnalité 4 : Utiliser INSERT
pour plusieurs lignes
Une autre fonctionnalité intéressante garantissant une meilleure coexistence et compatibilité avec d'autres systèmes de gestion de base de données fréquemment utilisés est l'instruction INSERT
à choix multiples.
-
Dans les versions précédentes de la base de données Oracle, par exemple, l'insertion de plusieurs lignes nécessitait une instruction insert distincte pour chaque ligne.
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');
Oracle Database 23ai a introduit la nouvelle syntaxe permettant d'insérer toutes ces lignes dans une instruction
INSERT
unique. Vous pouvez donc insérer plusieurs tuples dans une instruction LMD. Exécutez l'instruction suivante.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');
Outre une meilleure compatibilité avec d'autres bases de données, cette instruction peut être utilisée pour garantir la cohérence de certaines opérations d'insertion en mode de validation automatique. Cela peut être important, par exemple, pour les applications Oracle APEX qui utilisent ce mode pour travailler sur les données.
-
Exécutez l'instruction suivante pour utiliser cette fonctionnalité afin de remplir les valeurs de la table
EMP
.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);
Fonctionnalité 5 : utilisation du nouveau constructeur VALUE
A partir de la base de données Oracle 23ai, le constructeur de valeurs de table a été étendu. Elle peut désormais être utilisée dans les instructions INSERT
pour créer plusieurs lignes en une seule commande. Il peut également être utilisé dans les instructions SELECT
et dans la syntaxe de factorisation de vue. Dans ce dernier cas, il simplifie la syntaxe des instructions et évite d'utiliser la table DUAL
.
L'instruction suivante ressemble à une sorte de fonction de table à la volée.
SELECT * FROM (VALUES (50,'HR'), (60,'DEV'), (70,'AI')) virt_dept (deptno, dname);
Fonctionnalité 6 : utilisation d'alias dans la clause GROUP BY
Oracle Database 23ai introduit la possibilité d'utiliser des alias dans la clause GROUP BY
d'une instruction SELECT
. Cette fonctionnalité simplifie l'écriture de requêtes avec des expressions complexes et garantit une meilleure compatibilité avec d'autres bases de données relationnelles, telles que Teradata, MySQL et PostgreSQL.
Exemple :
SELECT to_char(hiredate,'YYYY') "Year", count(*)
FROM emp
GROUP BY to_char(hiredate,'YYYY');
Dans Oracle Database 23ai, cela peut être écrit de manière plus simple, comme illustré dans l'image suivante :
Fonctionnalité 7 : utiliser la clause RETURNING
de la clause UPDATE
et de la déclaration MERGE
Cette clause avait été implémentée précédemment dans le cadre de l'instruction EXECUTE IMMEDIATE
. Cependant, dans Oracle Database 23ai, nous pouvons le trouver dans le cadre d'instructions LMD statiques traditionnelles.
-
Dans ce cas, il permet d'obtenir de nouvelles et anciennes valeurs de colonnes à partir d'une ligne traitée. Tout d'abord, voyons le salaire actuel de King.
SELECT ename, sal FROM emp WHERE ename = 'KING';
-
Pour utiliser des variables dans LiveSQL, nous allons terminer les instructions en PL/SQL. Exécutez ce script. Elle crée d'abord les variables pour l'ancien et le nouveau salaire, puis met à jour le salaire de King à l'aide de la clause
RETURNING
pour définir nos variables. Nous allons ensuite examiner les résultats.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;
Old Salary: 6000 New Salary: 7000
Cet exemple a utilisé une instruction
UPDATE
, mais la clauseRETURNING
peut être utilisée de la même manière que les instructionsMERGE
.
Fonctionnalité 8 : utiliser des jointures dans UPDATE
et DELETE
Vous pouvez mettre à jour les données de table à l'aide de jointures basées sur des conditions de table étrangère. Vous n'avez pas besoin de sous-sélection ou de clause IN
.
-
Exécutez l'instruction suivante pour afficher les informations sur le salaire des employés du service de recherche.
select e.sal, e.empno from emp e, dept d where e.deptno=d.deptno and d.dname='RESEARCH';
-
Pour mettre à jour les informations de salaire, avant Oracle Database 23ai, nous devons utiliser une instruction imbriquée.
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');
Avec Oracle Database 23ai, vous pouvez l'utiliser comme suit :
UPDATE emp e set e.sal=e.sal*2 FROM dept d WHERE e.deptno=d.deptno and d.dname='RESEARCH';
-
Vous pouvez voir que le salaire a bien été mis à jour.
select e.sal, e.empno from emp e, dept d where e.deptno=d.deptno and d.dname='RESEARCH';
Fonctionnalité 9 : Utiliser des annotations
Les annotations sont des métadonnées facultatives pour les objets de base de données. Une annotation est une paire nom-valeur ou un nom lui-même. Le nom et la valeur facultative sont des champs de texte au format libre. Une annotation est représentée comme un élément subordonné à l'objet de base de données auquel l'annotation a été ajoutée. Les objets de schéma pris en charge incluent les tables, les vues, les vues matérialisées et les index. Avec les annotations, vous pouvez stocker et extraire des métadonnées concernant des objets de base de données. Vous pouvez l'utiliser pour personnaliser la logique métier, les interfaces utilisateur ou fournir des métadonnées aux référentiels de métadonnées. Il peut être ajouté avec l'instruction CREATE
ou ALTER
au niveau de la table ou de la colonne.
Avec les annotations, vous pouvez stocker et extraire des métadonnées sur les objets de base de données. Vous pouvez l'utiliser pour personnaliser la logique métier, les interfaces utilisateur ou fournir des métadonnées aux référentiels de métadonnées.
-
Créez une table annotée
EMP_ANNOTATED_NEW
avec des annotations de colonne et de table.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');
-
Les vues du dictionnaire de données telles que
USER_ANNOTATIONS
etUSER_ANNOTATIONS_USAGE
peuvent aider à surveiller l'utilisation.SELECT object_name, object_type, column_name, annotation_name, annotation_value FROM user_annotations_usage;
Fonctionnalité 10 : Utiliser des domaines SQL
Un domaine SQL est un objet de dictionnaire qui appartient à un schéma et encapsule un ensemble de propriétés et de contraintes facultatives. Il est créé à l'aide d'une instruction CREATE DOMAIN
. Les domaines fournissent des attributs de contraintes, d'affichage, de tri et d'annotations. Une fois que vous avez défini un domaine SQL, vous pouvez définir les colonnes de table à associer à ce domaine, ce qui permet d'appliquer explicitement les propriétés et contraintes facultatives du domaine à ces colonnes.
Les domaines SQL permettent aux utilisateurs de déclarer l'utilisation prévue pour les colonnes. Il s'agit d'objets de dictionnaire de données qui permettent de réutiliser facilement des connaissances propres à un domaine abstrait.
-
Créez un domaine nommé
yearbirth
et une table nomméeperson
.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');
CREATE TABLE person (id number(5), name varchar2(50), salary number, person_birth number(4) DOMAIN yearbirth ) annotations (display 'person_table');
``` desc person ;
Name Null? Type
NUMÉRO D'IDENTIFICATION(5) NOM VARCHAR2(50) NUMÉRO DE SALAIRE PERSON_BIRTH NUMÉRO(4) DOMAINE ANNÉE DE NAISSANCE
INSERER DANS les valeurs de personne (1,'MARTIN',3000, 1988) ;
2. With the new function `DOMAIN_DISPLAY` you can display the property.
SELECT DOMAIN_DISPLAY(person_birth) FROM person ;

3. Domain usage and annotations can be monitored with data dictionary views. Let us view `user_annotations_usage`.
SÉLECTIONNEZ * À PARTIR DE user_annotations_usage ;
Define reusable domain types (lightweight objects).
CRÉER LE DOMAINE EmailAddress EN TANT QUE VÉRIFICATION VARCHAR2(100) (REGEXP_LIKE(VALEUR, '^[^@]+@[^@]+.[^@]+$')) ;
CREATE TABLE utilisateurs ( user_id NUMBER, email EmailAddress ) ; ```
Limites et restrictions dans les fonctionnalités d'Oracle Database 23ai
-
Clause
FROM
.-
Applicable uniquement aux expressions simples telles que les fonctions, les littéraux ou les variables.
-
Ne peut pas être utilisé avec des requêtes impliquant des tables, des jointures ou des sous-interrogations.
-
Non pris en charge dans le contexte PL/SQL avec des boucles de curseur qui attendent une clause
FROM
.
-
-
Type de données
BOOLEAN
natif.-
Peut être utilisé dans les colonnes et les expressions de table.
-
Non indexable, les colonnes avec le type de données
BOOLEAN
ne peuvent pas être indexées. -
Pas directement pris en charge dans tous les outils client ou outils de reporting (peut nécessiter une traduction à 0/1 ou Y/N).
-
Non pris en charge dans certaines API ou pilotes plus anciens (les clients JDBC/ODBC peuvent avoir besoin de mises à jour).
-
-
IF NOT EXISTS
dans DDL.-
Simplifie les scripts LDD idempotents.
-
Disponible uniquement pour des objets spécifiques :
TABLE
,INDEX
,SEQUENCE
,VIEW
, etc. -
Tous les types d'objet ne le prennent pas en charge (par exemple,
TRIGGER
,SYNONYM
peut toujours nécessiter une vérification manuelle). -
Non pris en charge dans les anciennes versions d'Oracle.
-
-
INSERT
s multivalue.-
Nettoyer la syntaxe des insertions par lots.
-
Les ensembles de valeurs explicites ne peuvent pas être insérés à l'aide de
SELECT
ou de sous-interrogations dans la même clauseVALUES
. -
Ne peut pas être combiné avec la clause
RETURNING
pour toutes les lignes insérées en une seule étape.
-
-
Constructeur de valeurs de table (clause
VALUES
).-
Idéal pour les petits ensembles de lignes ad hoc.
-
A des limites de ligne (généralement inférieures ou égales à 999 en fonction du contexte).
-
Non optimisé pour les charges à grande échelle, il est préférable d'utiliser des tables temporaires ou des tables intermédiaires pour les jeux de données volumineux.
-
-
Alias dans la clause
GROUP BY
.-
Facilite la lecture et l'écriture des requêtes.
-
Non pris en charge dans toutes les fonctions analytiques ou requêtes complexes impliquant des colonnes de sous-requête.
-
Il peut être source de confusion dans les requêtes où l'alias est surchargé (par exemple, le même nom dans la requête interne).
-
-
Clause
RETURNING
enUPDATE
/MERGE
.-
Réduit le besoin de
SELECT
après DML. -
Les lignes réellement modifiées ne peuvent renvoyer que des valeurs.
-
Non utilisable pour les mises à jour en masse sans
FORALL
, doit utiliser le langage PL/SQL avecRETURNING BULK COLLECT
explicite.
-
-
Jointures dans
UPDATE
etDELETE
.-
Simplifie la logique multitable.
-
Seuls les types
INNER JOIN
etLEFT JOIN
sont pris en charge dans certains contextes. -
Peut nécessiter une réécriture pour la logique
MERGE
si vous utilisez d'anciens outils ou si vous avez besoin d'une compatibilité avec des versions Oracle antérieures.
-
-
Annotations.
-
Idéal pour la documentation.
-
Les annotations sont des métadonnées uniquement. Elles ne peuvent pas être appliquées lors de l'exécution.
-
Nécessite l'utilisation de vues du dictionnaire de données Oracle (
*_ANNOTATIONS
) pour l'extraction. -
Pas encore intégré aux outils d'export/import ou de réplication Oracle Data Pump.
-
-
Types d'objet léger avec domaines SQL.
-
Application de type cohérente et réutilisable.
-
Encore moins puissant que les types d'objet complets (aucune méthode, aucun attribut).
-
Pas d'héritage ou de composition, destiné à l'application de contraintes primitives uniquement.
-
Impossible de définir les valeurs par défaut dans le domaine lui-même (les valeurs par défaut sont toujours spécifiées au niveau de la colonne).
-
Restrictions générales
-
Compatibilité des outils : de nombreux outils d'interface graphique et anciennes bibliothèques client Oracle peuvent ne pas encore prendre entièrement en charge la syntaxe Oracle Database 23ai (en particulier
VALUES
,BOOLEAN
,DOMAIN
). -
Exporter/importer : certaines fonctionnalités telles que les annotations ou les domaines peuvent ne pas être conservées dans les workflows
expdp
/impdp
plus anciens. -
Comportement expérimental : étant donné que ces fonctionnalités sont nouvelles, certaines peuvent évoluer dans des versions mineures. Consultez régulièrement les notes de patch et la documentation.
Liens connexes
Accusés de réception
- Auteur - Aditya Srivastawa (architecte cloud principal)
Ressources de formation supplémentaires
Explorez d'autres ateliers sur le site docs.oracle.com/learn ou accédez à d'autres contenus d'apprentissage gratuits sur le canal Oracle Learning YouTube. En outre, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, consultez Oracle Help Center.
Explore SQL Features in Oracle Database 23ai
G35697-01
Copyright ©2025, Oracle and/or its affiliates.