Créer un DDL de table avec une exécution immédiate
Il existe deux manières d'écrire une requête DDL de création de table pour l'instruction Execute Immediate de Native Dynamic SQL dans Oracle Database. Nous avons déjà abordé l'un d'entre eux dans le dernier tutoriel. La première manière dont nous avons discuté dans le didacticiel précédent est probablement la manière la plus simple d'écrire une requête SQL pour Dynamic SQL. Mais cela ne nous empêche pas d'en apprendre davantage. Alors allons de l'avant et apprenons le second.
Ainsi, dans ce didacticiel, nous allons apprendre la deuxième méthode d'écriture d'un DDL CREATE TABLE pour l'exécution dynamique à l'aide de l'instruction Execute Immediate.
Comme ce tutoriel est dans la continuité du précédent, je vous demande donc de parcourir d'abord ce blog pour une meilleure compréhension. Cela étant dit, commençons le tutoriel.
Étape 1 :Préparez le DDL CREATE TABLE.
Préparez au préalable votre requête SQL que vous souhaitez exécuter dynamiquement. Cela réduira la confusion du code et minimisera également l'erreur syntaxique.
CREATE TABLE tut_83 ( tut_num NUMBER(5), tut_name VARCHAR2 (50), CONTRAINTE cons1_col1_pid_pk PRIMARY KEY (tut_num))
Voici notre CREATE TABLE DDL. À l'exception du nom modifié et d'une contrainte de clé primaire ajoutée, ce DDL est à peu près similaire à celui que nous avons créé dans le dernier didacticiel.
Étape 2 :écrivez le bloc PL/SQL pour l'exécution dynamique de l'instruction DDL.
Maintenant que nous avons préparé notre DDL CREATE TABLE. Écrivons le programme PL/SQL pour l'exécuter dynamiquement.
SET SERVEROUTPUT ON;DECLARE ddl_qry VARCHAR2(150);BEGINddl_qry :='CREATE TABLE tut_83('|| 'tut_num NUMBER(3),'|| 'tut_name VARCHAR2(50)'|| ')';EXECUTE IMMEDIATE ddl_qry;END;/
Voyons ce que nous avons fait dans ce programme.
La section de déclaration .
DECLARER ddl_qry VARCHAR2 (150);
Dans la section de déclaration de notre bloc PL/SQL, nous avons déclaré une variable avec le nom ddl_qry. Cette variable contiendra notre CREATE TABLE DDL que nous exécuterons à l'aide de l'instruction Execute Immediate.
Selon le dernier tutoriel, Execute Immediate traite toutes les instructions SQL comme une chaîne de type de données VARCHAR2. C'est pourquoi nous avions déclaré notre variable ddl_qry comme type de données VARCHAR2.
La section d'exécution.
Juste après la section de déclaration, nous avons notre section d'exécution où tout le plaisir se passe.
BEGIN ddl_qry :='CREATE TABLE tut_83 ('|| 'tut_num NUMBER (5),'|| 'tut_name VARCHAR2 (50),'|| 'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'|| ')'; EXÉCUTER IMMÉDIATEMENT ddl_qry;END;/
Cette section d'exécution se compose de seulement deux instructions :
- Énoncé de mission
- Exécuter l'instruction immédiate
La première déclaration qui est la «déclaration d'affectation» rend ce code différent du précédent. Voyons quelles sont ces déclarations.
Énoncé 1 :Énoncé de devoir.
ddl_qry :='CREATE TABLE tut_83 ('|| 'tut_num NUMBER (5),'|| 'tut_name VARCHAR2 (50),'|| 'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'|| ')';C'est la seule déclaration qui rend ce programme PL/SQL différent de celui que nous avons vu dans le tutoriel précédent.
Dans cette instruction, nous affectons le CREATE TABLE DDL à la variable ddl_qry. Alors qu'est-ce qui est différent ici ?
Dans la méthode précédente, nous avons inclus toute notre déclaration DDL dans une paire de guillemets simples (' '). Comme ça
ddl_qry:='CREATE TABLE tut_82 ( tut_num NUMBER(3), tut_name VARCHAR2 (50) )';Première façon d'écrire une requête DDL
Alors qu'ici, dans la deuxième méthode, au lieu d'envelopper toute la requête dans les guillemets simples, nous l'avons d'abord divisée en plusieurs chaînes de VARCHAR2. Nous l'avons fait en enveloppant chaque ligne de la requête dans des guillemets simples. Par la suite, nous les avons tous joints en utilisant l'opérateur de concaténation ( || ) afin que le moteur PL/SQL les exécute comme une seule unité.
Vous pouvez regarder une démonstration détaillée de cette approche de rupture et de conquête pour une exécution dynamique dans le didacticiel vidéo.
Lecture suggérée :fonction Concat contre opérateur Concat.
Énoncé 2 :Exécuter l'instruction immédiate.
Notre deuxième instruction est l'instruction Execute Immediate. Il exécute toute instruction SQL qui renvoie dynamiquement une seule ligne du résultat. Dans notre cas, cette instruction exécute une requête CREATE TABLE DDL via un bloc PL/SQL.
Il n'y a que deux façons d'exécuter une instruction DDL via un bloc PL/SQL dans Oracle Database. Soit en utilisant le package DBMS_SQL, soit en exécutant immédiatement le SQL dynamique natif. Lisez ici pour savoir ce que vous pouvez faire d'autre en utilisant l'exécution immédiate.
Pour exécuter dynamiquement un DDL, vous devez d'abord écrire la phrase réservée « Exécuter immédiatement ». Suivi du nom de la variable dans laquelle vous avez stocké votre DDL comme nous l'avons fait ci-dessus.
Vérifiez si le tableau est créé ou non.
Il existe plusieurs façons de vérifier si le bloc PL/SQL a exécuté le CREATE TABLE DDL avec succès ou non. Mais ici, je vais vous montrer les deux manières les plus simples et les plus populaires.
Utilisation de la commande DESCRIBE
Le moyen le plus simple de vérifier si le bloc PL/SQL a créé la table tut_83 avec succès ou non consiste à utiliser la commande DESCRIBE. La commande Décrire affiche la structure de la table mentionnée, uniquement si elle existe, sinon elle renvoie une erreur.
Essayons ça
DESCRIBE tut_83;Ou DESC tut_83Si lors de l'exécution de la commande décrite ci-dessus, vous voyez la structure de la table tut_83, cela signifie que le bloc PL/SQL ci-dessus a créé la table avec succès. Mais si vous obtenez une erreur, cela signifie que vous vous êtes trompé quelque part et que l'exécution du bloc PL/SQL échoue.
Utilisation du dictionnaire de données ALL_OBJECTS.
Vous pouvez également interroger le dictionnaire de données ALL_OBJECTS. Cela permet de savoir si la table souhaitée ou tout autre objet que vous essayez de créer est créé ou non. Comme ça
SELECT 'Nous avons créé une table avec le nom '||object_name||' dans ' ||propriétaire||' schema on '||createdFROM all_objects WHERE object_name ='TUT_83';Ce sont deux des nombreuses façons de savoir si l'objet souhaité est créé avec succès.
Encore une chose avant de terminer ce tutoriel. Veuillez lire le blog précédent pour une meilleure compréhension de cela ainsi que les tutoriels à venir.
Il s'agit du didacticiel PL/SQL sur la deuxième manière d'écrire un DDL CREATE TABLE pour l'instruction Execute Immediate de Native Dynamic SQL dans Oracle Database.
J'espère que vous avez apprécié la lecture. Assurez-vous de vous abonner à la chaîne YouTube. Parce que dans le prochain tutoriel, nous apprendrons comment supprimer et modifier dynamiquement des objets de schéma.
Merci et bonne journée !