Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment exécuter Créer une table DDL avec EXECUTE IMMEDIATE dans la base de données Oracle

Créer un DDL de table avec une exécution immédiate

Vous devez vous demander quel pourrait être le problème lors de l'exécution d'un DDL CREATE TABLE ? Bon, pas de problème tant que vous les exécutez avec SQL. Mais quand il s'agit de les exécuter avec PL/SQL, c'est un peu difficile.

Tout d'abord, que sont les instructions DDL dans Oracle Database ?

DDL signifie Data Definition Language. À l'aide d'instructions DDL, nous pouvons créer ou modifier les objets de la base de données ainsi que les schémas. Ces déclarations sont :

  • CRÉER,
  • DÉPOSER et
  • ALTER.

Il est toujours recommandé de mettre en page vos schémas et objets à l'avance et de les créer au stade initial de votre projet. Si possible, nous devrions faire ce travail en utilisant SQL. Cela pourrait être beaucoup plus rapide et beaucoup plus propre. Mais parfois, ce n'est pas toujours possible, dans cette situation, nous pouvons utiliser des fonctionnalités telles que Native Dynamic SQL dans Oracle Database.

Native Dynamic SQL nous permet d'exécuter des instructions SQL telles que DDL ou DML directement via notre PL/SQL.

Pourquoi ne pouvons-nous pas exécuter DDL via un programme PL/SQL ?

Si vous vous demandez toujours si l'exécution d'une instruction DDL avec PL/SQL est si compliquée, essayons de créer une table via un programme PL/SQL.

SET SERVEROUTPUT ON;
BEGIN 
    CREATE TABLE tut_82 (
    tut_num NUMBER(3),
    tut_name   VARCHAR2 (50));  
END;
/

Je sais que cette approche aurait été votre première pensée si je vous avais demandé de créer une table via un programme PL/SQL. Je veux dire, ça a l'air parfait, qu'est-ce qui pourrait mal tourner ?

Il n'y a rien de mal avec ce programme, le seul problème ici est que PL/SQL ne prend pas directement en charge les instructions DDL. Pour exécuter une instruction DDL à l'aide de PL/SQL, nous devons soit prendre l'aide du package DBMS_SQL, soit utiliser la méthode avancée et améliorée de NATIVE DYNAMIC SQL.

Vous pouvez vérifier cela par vous-même. Allez-y et exécutez le programme ci-dessus. Lors de l'exécution, vous obtiendrez une erreur qui ressemble à celle montrée dans l'image ci-dessous.

Alors, quelle est la bonne façon d'exécuter un DDL via un programme PL/SQL ?

Vous pouvez exécuter un programme DDL via PL/SQL en utilisant le package DBMS_SQL ou en utilisant l'instruction Execute Immediate de Native Dynamic SQL. Cette dernière option est la plus utilisée, surtout depuis quelques jours en raison de ses meilleures performances et de sa syntaxe facile à apprendre.

Comment exécuter CREATE TABLE DDL à l'aide de Execute Immediate dans Oracle Database ?

Étape 1 :préparez votre DDL à l'avance.

Bien que ce ne soit pas nécessaire, je vous suggère de préparer votre DDL à l'avance, de cette façon vous pouvez au moins éliminer les risques d'erreur syntaxique à cause de la syntaxe de votre instruction DDL.

Dans notre cas, nous voulons exécuter un DDL CREATE TABLE donc écrivons d'abord un DDL pour créer une table.

CREATE TABLE tut_82 (
    tut_num    NUMBER (3),
    tut_name   VARCHAR2 (50)
) 

Cette instruction DDL créera une table avec le nom tut_82 avec deux colonnes tut_num de type de données NUMBER et tut_name de type de données VARCHAR2.

Attention, ne terminez pas votre instruction SQL (celle que vous souhaitez exécuter avec EXECUTE IMMEDIATE) par un point-virgule.

Étape 2 :exécutez votre DDL via le programme PL/SQL à l'aide de l'exécution immédiate.

Une fois que vous avez préparé votre DDL, vous devez écrire votre programme PL/SQL.

SET SERVEROUTPUT ON;
DECLARE
    ddl_qry     VARCHAR2 (150);
BEGIN
    ddl_qry := 'CREATE TABLE tut_82(
                tut_num     NUMBER(3),
                tut_name    VARCHAR2(50)
                )';
    EXECUTE IMMEDIATE ddl_qry;
END;
/

Dans le bloc PL/SQL ci-dessus, nous avons déclaré une variable avec le nom ddl_qry. Nous avons utilisé cette variable pour contenir notre instruction DDL que nous avons préparée à l'étape 1.

Information :
Une chose dont vous devez vous assurer ici est que la variable que vous utiliserez pour contenir l'instruction SQL que vous souhaitez exécuter avec votre instruction EXECUTE IMMEDIATE doit toujours être de type de données VARCHAR2 et ont beaucoup de largeur de données afin que votre DDL puisse facilement s'y intégrer.

Dans la section d'exécution de ce bloc PL/SQL, nous avons deux instructions exécutables. Ces déclarations sont :

Énoncé 1 :Énoncé de devoir

Dans la première instruction, nous avons stocké notre DDL de création de table dans la variable ddl_qry à l'aide de l'opérateur d'affectation (en PL/SQL, l'opérateur d'affectation est la combinaison des deux-points et égal au signe).

Énoncé 2 :L'instruction Mighty Execute Immediate

La deuxième instruction est l'instruction d'exécution. Pour exécuter un DDL dynamiquement, vous devez d'abord écrire la phrase réservée "Exécuter immédiatement" suivie du nom de la variable dans laquelle vous avez stocké votre DDL comme nous l'avons fait ci-dessus.

Si vous le souhaitez, vous pouvez également écrire votre DDL directement après la phrase « Phrase réservée ». C'est complètement un choix personnel. J'aime utiliser la première approche où nous utilisons Variable pour contenir le DDL, car tout d'abord, cela donne à votre code une apparence soignée et propre, et cela facilite également beaucoup le traçage des erreurs.

Mais Manish, je veux aussi apprendre l'autre façon d'écrire l'instruction DDL.

Bien sûr, il n'y a rien de mal à apprendre quelque chose de nouveau.

BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE tut_82(
                	tut_num     NUMBER(3),
                	tut_name    VARCHAR2(50)
                )';
END;
/

L'approche alternative au code ci-dessus consiste à écrire l'instruction DDL directement dans votre instruction Execute Immediate. Pour cela, il vous suffit d'écrire d'abord la phrase réservée Execute Immediate suivie de l'instruction DDL que vous souhaitez exécuter dynamiquement.

Dans l'une ou l'autre des manières, vous n'avez qu'à vous occuper de quelques petites choses lors de l'écriture du DDL pour l'exécution immédiate.

Premièrement :placez toujours votre instruction SQL dans une paire de guillemets simples

Rappelez-vous toujours que l'exécution immédiate traite DDL ou DML ou toute autre instruction SQL prise en charge que vous souhaitez exécuter dynamiquement comme une chaîne de type de données VARCHAR2 et en PL/SQL, nous enfermons tout caractère ou chaîne VARCHAR2 dans une paire de guillemets simples. Assurez-vous donc toujours de placer votre instruction SQL que vous souhaitez exécuter à l'aide de l'exécution immédiate dans une paire de guillemets simples.

Deuxièmement :faites attention au point-virgule.

Si vous écrivez une instruction SQL pour Execute Immediate, vous devez placer le point-virgule (;) juste à l'extérieur des guillemets simples dans lesquels vous avez placé votre instruction SQL. D'autre part, si vous écrivez un bloc PL/SQL pour une exécution dynamique à l'aide de Execute Immediate, vous devez placer le point-virgule à la fin de votre bloc PL/SQL juste avant le guillemet simple fermant ainsi que juste à l'extérieur des guillemets simples fermants.

Il s'agit du didacticiel détaillé sur l'exécution de l'instruction Create Table DDL à l'aide de l'instruction EXECUTE IMMEDIATE de Native Dynamic SQL dans Oracle Database. J'espère que cela vous a plu et que vous avez appris quelque chose de nouveau.

Assurez-vous de vous abonner à ma chaîne YouTube car dans le prochain didacticiel, nous apprendrons quelque chose de nouveau et d'intéressant sur Dynamic SQL. Vous pouvez aussi me suivre sur mon Twitter et Facebook.

Merci et bonne journée !