Note :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, voir Démarrer avec le niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments d'Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles qui sont propres à votre environnement en nuage.
Explorer les fonctions SQL dans Oracle Database 23ai
Présentation
Nous allons apprendre 10 fonctionnalités dans ce tutoriel que vous devez savoir et comment ils se comparent à leurs homologues existants. Ces fonctions sont les suivantes :
- Clause
FROM(facultative). BOOLEANpour SQL.- Clause LDD (
IF NOT EXISTSData Definition Language). INSERTmultivaleurs.- Nouveau constructeur de table
VALUE. - Alias dans la clause
GROUP BY. - Clause
RETURNINGdes énoncésUPDATEetMERGE. - Jointures dans
UPDATEetDELETE. - 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 des interrogations plus simples en supprimant l'exigence d'utiliser la clauseFROMlors de la sélection d'expressions ou de fonctions intégrées. -
Mettre en oeuvre le type de données
BOOLEANnatif dans SQL : Tirez parti du type de donnéesBOOLEANnatif dans les tables, les interrogations et les conditions SQL pour un traitement de logique vrai/faux plus intuitif. -
Utiliser
IF NOT EXISTSdans les énoncés LDD : Simplifiez la logique de création et de suppression d'objets en exécutant conditionnellement les énoncésCREATEetDROPsans vérifications PL/SQL supplémentaires. -
Effectuer des opérations
INSERTmultivaleurs : Insérez plusieurs rangées dans un seul énoncéINSERTpour 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 jeux de données insérés : Créez des jeux de rangées temporaires directement dans SQL à l'aide du constructeur
VALUES, prenant en charge des opérations telles queMERGE,SELECTou la comparaison. -
Alias de colonne de référence dans les clauses GROUP BY : Améliorez la lisibilité des interrogations en autorisant l'utilisation d'alias
SELECTdansGROUP BYau lieu de répéter des expressions. -
Tirer parti de la clause
RETURNINGdansUPDATEetMERGE: Extrayez les données touchées directement à partir des énoncésUPDATEetMERGEsans avoir besoin d'une interrogation de suivi. -
Effectuer des jointures dans les énoncés
UPDATEetDELETE: Utilisez la logiqueJOINdirectement dans les opérationsUPDATEetDELETEpour modifier ou supprimer des enregistrements en fonction des conditions de table connexes. -
Annoter les objets de base de données avec des métadonnées : Documentez les objets de base de données à l'aide de
ANNOTATIONpour stocker les métadonnées descriptives (par exemple, responsable, fonction) afin de faciliter la maintenance et l'introspection. -
Définir des types d'objet légers à l'aide de domaines SQL : Créez des types de domaine réutilisables avec des contraintes pour assurer la cohérence et une forte frappe entre plusieurs tables.
Préalables
-
Connaissances SQL de base.
-
Comprendre la syntaxe SQL :
SELECT,INSERT,UPDATE,DELETE,JOIN,GROUP BY, etc. -
Connaissance des concepts de base de données relationnelle et des types de données.
-
-
Expérience avec Oracle Database 23ai et ses versions antérieures.
-
Connaissance du fonctionnement du langage LDD, du langage LMD (Data Manipulation Language) et du langage PL/SQL dans Oracle Database 19c, Oracle Database 21c et les versions antérieures.
-
Connaissance des fonctions propres à Oracle, telles que
DUAL,MERGE,RETURNING INTO, etc.
-
-
Accès à l'environnement Oracle Database 23ai.
-
Avoir accès à Oracle Database 23ai (installation locale, instance en nuage ou Oracle Live SQL).
-
Certaines fonctions (telles que les domaines SQL ou
BOOLEAN) ne fonctionnent que dans Oracle Database 23ai.
-
-
Outils SQL*Plus, SQLcl ou d'interface graphique (tels que SQL Developer ou DataGrip). Possibilité d'exécuter et de tester des instructions SQL dans une interface compatible.
-
Principes fondamentaux du langage PL/SQL (pour les fonctions avancées). Pour utiliser
RETURNING INTO, les blocs procéduraux et le traitement du code SQL dynamique. -
Connaissance des contraintes et des règles d'intégrité des données. Il est nécessaire 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. Possibilité de créer/modifier des tables, des domaines et des annotations, nécessite des privilèges utilisateur appropriés.
-
Sensibilisation aux versions. Assurez-vous que vos outils et vos clients prennent en charge les fonctions d'Oracle Database 23ai (les pilotes ou outils plus anciens peuvent échouer).
-
(Facultatif) Exposition à d'autres dialectes SQL modernes (PostgreSQL, MySQL, etc.). Cela vous aidera à apprécier la compatibilité croisée des nouvelles fonctions telles que
VALUES,BOOLEANetIF EXISTS.
Fonction 1 : Utiliser la clause FROM
Une fonctionnalité intéressante introduite dans Oracle Database 23ai est l'optionalité de la clause FROM dans les énoncés SELECT. Jusqu'à cette version, la clause FROM était requise.
Voici quelques avantages potentiels d'une fonction SELECT sans FROM dans Oracle Database 23ai.
-
Sélectionnez la date courante pour faciliter la manipulation des données.
SELECT CURRENT_DATE;
-
Opérations mathématiques ou calculs 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 de chaîne ou conversions sans se fier aux 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;
Fonction 2 : Utiliser le type de données BOOLEAN
Oracle Database 23ai présente 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 des données dans la nouvelle table. La valeur
IS_SLEEPINGseraNOT NULLréglée àFALSEcomme valeur 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.014Ici, 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 ne dort pas.
1 row inserted. Elapsed: 00:00:00.006Pour 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.002Et pour Ron, nous utilisons une valeur de 1 - Ron dort.
-
Voir certains 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, Vrai/Faux, Oui/Non, ou toute autre entrée commune retournera une valeur de table exacte.
Fonction 3 : Utiliser la clause LDD IF NOT EXISTS
À partir d'Oracle Database 23ai, la nouvelle clause LDD IF NOT EXISTS permet de décider comment les erreurs LDD seront traité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;Comme il n'existe aucune table
DEPTà supprimer, une erreur s'affiche :ORA-00942: table or view does not exist. -
Toutefois, dans Oracle Database 23ai, nous pouvons utiliser
DROP IF EXISTSsans erreur. Cela nous donne la tranquillité d'esprit tout en évitant les erreurs. Exécutez maintenant le même énoncé, mais incluez cette nouvelle fonctionIF 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) ) ;![IF [NOT] EXISTE la clause LDD Image montrant comment utiliser la clause IF [NOT] EXISTS DDL](./images/Picture3.png)
-
Utilisez cette fonction pour créer d'autres tables-échantillons tout au long de ce tutoriel. Ici, nous allons créer une table d'employés appelé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
Fonction 4 : Utiliser INSERT pour plusieurs rangées
Une autre fonction intéressante assurant une meilleure coexistence et compatibilité avec d'autres systèmes de gestion de base de données fréquemment utilisés est l'énoncé INSERT multivalue.
-
Dans les versions précédentes de la base de données Oracle, par exemple, l'insertion de plusieurs lignes nécessite une instruction d'insertion 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 rangées dans un seul énoncé
INSERT. Vous pouvez donc insérer plusieurs tuples dans un 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');
En plus d'une meilleure compatibilité avec d'autres bases de données, cette instruction peut être utilisée pour assurer 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 des données.
-
Exécutez l'énoncé suivant pour utiliser cette fonction 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);
Fonction 5 : Utiliser le nouveau constructeur VALUE
Depuis la base de données Oracle 23ai, le constructeur de valeurs de table a été étendu. Il peut maintenant être utilisé dans les énoncés INSERT pour créer plusieurs rangées dans une seule commande. Il peut également être utilisé dans les énoncés SELECT et dans la syntaxe de factorisation de vue. Dans ce dernier cas, il simplifie la syntaxe des énoncés 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);

Fonction 6 : Utiliser des alias dans la clause GROUP BY
Oracle Database 23ai introduit la possibilité d'utiliser des alias dans la clause GROUP BY d'un énoncé SELECT. Cette fonction simplifie l'écriture des interrogations avec des expressions complexes et assure une meilleure compatibilité avec d'autres bases de données relationnelles, telles que Teradata, MySQL et PostgreSQL.
Par 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 le montre l'image suivante :

Fonction 7 : Utiliser la clause RETURNING de l'énoncé UPDATE et MERGE
Cette clause avait été mise en oeuvre précédemment dans le cadre de l'énoncé EXECUTE IMMEDIATE. Toutefois, dans Oracle Database 23ai, nous pouvons le trouver dans le cadre d'instructions LMD statiques traditionnelles.
-
Dans ce cas, il permet d'obtenir les anciennes et nouvelles 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 fermer les énoncés dans PL/SQL. Exécutez ce script. Il créera d'abord les variables pour l'ancien et le nouveau salaire, puis mettra à jour le salaire de King à l'aide de la clause
RETURNINGpour définir nos variables. Nous examinerons ensuite 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: 7000Cet exemple a utilisé un énoncé
UPDATE, mais la clauseRETURNINGpeut être utilisée de la même manière avec les énoncésMERGE.
Fonction 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. Il n'est pas nécessaire d'effectuer des sous-sélections ou une clause IN.
-
Exécutez l'instruction suivante pour voir les informations sur le salaire de l'employé provenant 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 sur le 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 été mis à jour.
select e.sal, e.empno from emp e, dept d where e.deptno=d.deptno and d.dname='RESEARCH';
Fonction 9 : Utiliser des annotations
Les annotations sont des métadonnées facultatives pour les objets de base de données. Une annotation est soit une paire nom-valeur, soit un nom par lui-même. Le nom et la valeur facultative sont des champs de texte à structure libre. Une annotation est représentée en tant qu'é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 sur 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'énoncé CREATE ou ALTER au niveau de la table ou de la colonne.
Avec les annotations, vous pouvez stocker et extraire les métadonnées relatives aux 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_NEWavec 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_ANNOTATIONSetUSER_ANNOTATIONS_USAGEpeuvent aider à surveiller l'utilisation.SELECT object_name, object_type, column_name, annotation_name, annotation_value FROM user_annotations_usage;
Fonction 10 : Utiliser des domaines SQL
Un domaine SQL est un objet de dictionnaire qui appartient à un schéma et qui encapsule un jeu de propriétés et de contraintes facultatives et qui est créé avec un énoncé CREATE DOMAIN. Les domaines fournissent des attributs de contraintes, d'affichage, de classement et d'annotations. Après avoir défini un domaine SQL, vous pouvez définir des colonnes de table à associer à ce domaine, en appliquant 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é
yearbirthet 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');
" personne desc;
Nom nul? Type
ID NUMBER(5) NOM VARCHAR2(50) NUMÉRO DE SALAIRE PERSON_BIRTH NUMÉRO(4) DOMAINE ANNÉE DE NAISSANCE
INSÉRER LES valeurs de personne (1,'MARTIN',3000, 1988);
2. With the new function `DOMAIN_DISPLAY` you can display the property.
SÉLECTIONNER DOMAIN_DISPLAY(person_birth) DE LA personne;

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 users ( user_id NUMBER, courriel EmailAddress ); ```

Limites et restrictions dans les fonctions d'Oracle Database 23ai
-
Clause
FROM.-
S'applique uniquement aux expressions simples telles que les fonctions, les littéraux ou les variables.
-
Ne peut pas être utilisé avec des interrogations impliquant des tables, des jointures ou des sous-interrogations.
-
Non pris en charge dans le contexte PL/SQL avec des boucles de curseur attendues avec une clause
FROM.
-
-
Type de données
BOOLEANnatif.-
Peut être utilisé dans des colonnes de table et des expressions.
-
Non indexable, les colonnes de type
BOOLEANne peuvent pas être indexées. -
Non directement pris en charge dans tous les outils clients ou outils de production de rapports (peut nécessiter une traduction en 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 EXISTSdans le LDD.-
Simplifie les scripts LDD idémpotents.
-
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,SYNONYMpeut encore nécessiter une vérification manuelle). -
Non pris en charge dans les anciennes versions d'Oracle.
-
-
Multivalue
INSERTs.-
Nettoyer la syntaxe pour les insertions par lots.
-
Les jeux de valeurs explicites limités à l'insertion ne peuvent pas utiliser
SELECTou des sous-interrogations dans la même clauseVALUES. -
Ne peut pas être combiné avec la clause
RETURNINGpour toutes les rangées insérées dans une étape.
-
-
Constructeur de valeur de table (clause
VALUES).-
Idéal pour les petits ensembles de rangées ad hoc.
-
Contient des limites de ligne (généralement 999 ou moins selon le contexte).
-
Non optimisé pour les chargements à 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 d'analyse ou les interrogations complexes impliquant des colonnes de sous-interrogation.
-
Peut entraîner une confusion dans les interrogations où l'alias est surchargé (par exemple, le même nom dans l'interrogation interne).
-
-
Clause
RETURNINGdansUPDATE/MERGE.-
Réduit le besoin de
SELECTaprès DML. -
Ne peut retourner que les valeurs des rangées réellement modifiées.
-
Non utilisable pour les mises à jour en masse sans
FORALL, doit utiliser PL/SQL avecRETURNING BULK COLLECTexplicite.
-
-
Jointures dans
UPDATEetDELETE.-
Rend la logique multi-table plus simple.
-
Seuls les types
INNER JOINetLEFT JOINsont pris en charge dans certains contextes. -
Peut nécessiter une réécriture pour la logique
MERGEsi vous utilisez des outils plus anciens ou si vous avez besoin de compatibilité avec les versions antérieures d'Oracle.
-
-
Annotations.
-
Idéal pour la documentation.
-
Les annotations sont des métadonnées uniquement, qui ne sont pas exécutoires au moment de l'exécution.
-
Nécessite l'utilisation des vues du dictionnaire de données Oracle (
*_ANNOTATIONS) pour l'extraction. -
N'est pas encore intégré aux outils d'exportation/importation ou de réplication d'Oracle Data Pump.
-
-
Types d'objet légers avec domaines SQL.
-
Application de type réutilisable et cohérente.
-
Encore moins puissant que les types d'objets complets (aucune méthode, aucun attribut).
-
Aucun héritage ou composition, destiné uniquement à l'application de contraintes primitives.
-
Impossible de définir des 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é avec les 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 fonctions telles que les annotations ou les domaines peuvent ne pas être conservées dans les anciens flux de travail
expdp/impdp. -
Comportement expérimental : Comme ces fonctionnalités sont nouvelles, certaines peuvent évoluer dans des versions mineures — vérifiez fréquemment les notes de correctif et la documentation.
Liens connexes
Remerciements
- Auteur - Aditya Srivastawa (architecte en nuage principal)
Autres ressources d'apprentissage
Explorez d'autres laboratoires sur le site docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir la documentation sur le produit, visitez Oracle Help Center.
Explore SQL Features in Oracle Database 23ai
G35696-01
Copyright ©2025, Oracle and/or its affiliates.