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). BOOLEAN
pour SQL.- Clause LDD (
IF NOT EXISTS
Data Definition Language). INSERT
multivaleurs.- Nouveau constructeur de table
VALUE
. - Alias dans la clause
GROUP BY
. - Clause
RETURNING
des énoncésUPDATE
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 des interrogations plus simples en supprimant l'exigence d'utiliser la clauseFROM
lors de la sélection d'expressions ou de fonctions intégrées. -
Mettre en oeuvre le type de données
BOOLEAN
natif dans SQL : Tirez parti du type de donnéesBOOLEAN
natif dans les tables, les interrogations et les conditions SQL pour un traitement de logique vrai/faux plus intuitif. -
Utiliser
IF NOT EXISTS
dans les énoncés LDD : Simplifiez la logique de création et de suppression d'objets en exécutant conditionnellement les énoncésCREATE
etDROP
sans vérifications PL/SQL supplémentaires. -
Effectuer des opérations
INSERT
multivaleurs : Insérez plusieurs rangées dans un seul énoncéINSERT
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 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
,SELECT
ou 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
SELECT
dansGROUP BY
au lieu de répéter des expressions. -
Tirer parti de la clause
RETURNING
dansUPDATE
etMERGE
: Extrayez les données touchées directement à partir des énoncésUPDATE
etMERGE
sans avoir besoin d'une interrogation de suivi. -
Effectuer des jointures dans les énoncés
UPDATE
etDELETE
: Utilisez la logiqueJOIN
directement dans les opérationsUPDATE
etDELETE
pour 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
ANNOTATION
pour 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
,BOOLEAN
etIF 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_SLEEPING
seraNOT NULL
réglée àFALSE
comme 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.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 ne dort pas.
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.
-
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 EXISTS
sans 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) ) ;
-
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
RETURNING
pour 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: 7000
Cet exemple a utilisé un énoncé
UPDATE
, mais la clauseRETURNING
peut ê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_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;
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é
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');
" 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
BOOLEAN
natif.-
Peut être utilisé dans des colonnes de table et des expressions.
-
Non indexable, les colonnes de type
BOOLEAN
ne 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 EXISTS
dans 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
,SYNONYM
peut encore nécessiter une vérification manuelle). -
Non pris en charge dans les anciennes versions d'Oracle.
-
-
Multivalue
INSERT
s.-
Nettoyer la syntaxe pour les insertions par lots.
-
Les jeux de valeurs explicites limités à l'insertion ne peuvent pas utiliser
SELECT
ou des sous-interrogations dans la même clauseVALUES
. -
Ne peut pas être combiné avec la clause
RETURNING
pour 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
RETURNING
dansUPDATE
/MERGE
.-
Réduit le besoin de
SELECT
aprè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 COLLECT
explicite.
-
-
Jointures dans
UPDATE
etDELETE
.-
Rend la logique multi-table plus simple.
-
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 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.