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

Oracle DROP TABLE IF EXISTS Alternatives

Oracle Database n'inclut pas le IF EXISTS clause que certains autres SGBD proposent dans leur DROP TABLE déclarations. Par conséquent, si nous voulons éviter toute mauvaise erreur résultant de la tentative de suppression d'une table inexistante, nous devons effectuer un peu de travail supplémentaire.

Option 1 :Vérifier si le tableau existe

Nous pouvons vérifier les DBA_TABLES vue du dictionnaire de données pour voir si la table existe. Cette vue décrit toutes les tables relationnelles de la base de données. Ses colonnes sont les mêmes que celles de ALL_TABLES .

Nous pouvons vérifier cette table pour voir si la table existe, puis exécuter uniquement le DROP TABLE déclaration si c'est le cas.

Exemple :

DECLARE
tbl_count number;
sql_stmt long;

BEGIN
    SELECT COUNT(*) INTO tbl_count 
    FROM dba_tables
    WHERE owner = 'HR'
    AND table_name = 'T1';

    IF(tbl_count <> 0)
        THEN
        sql_stmt:='DROP TABLE T1';
        EXECUTE IMMEDIATE sql_stmt;
    END IF;
END;

Résultat :

PL/SQL procedure successfully completed.

Dans ce cas, la table appelée t1 existait déjà et a été supprimée.

Maintenant, si nous exécutons à nouveau le même code, nous obtenons le même résultat :

PL/SQL procedure successfully completed.

Aucune erreur ne s'est produite, même si la table n'existe plus.

Cependant, si nous essayons simplement de supprimer la table sans d'abord vérifier son existence, nous obtenons une erreur :

DROP TABLE T1;

Résultat :

Error report -
ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"

Option 2 :Tester l'erreur

Une autre façon de le faire est simplement d'aller de l'avant et d'exécuter le DROP TABLE instruction, puis interceptez toute erreur ORA-00942 qui se produit. Plus précisément, nous interceptons toute erreur SQLCODE -942 qui se produit.

Exemple :

BEGIN
   EXECUTE IMMEDIATE 'DROP TABLE t1';
EXCEPTION
   WHEN OTHERS THEN
      IF SQLCODE != -942 THEN
         RAISE;
      END IF;
END;

Résultat :

PL/SQL procedure successfully completed.

J'ai exécuté cela même si le T1 le tableau n'existait pas. L'erreur ORA-00942 a été interceptée et traitée, nous n'avons donc pas reçu de message d'erreur.

Si la table avait déjà existé, la table aurait été supprimée et nous verrions la même sortie.