Oracle Database n'inclut pas le IF NOT EXISTS
clause avec son CREATE TABLE
déclaration, comme le font certains autres SGBD.
Par conséquent, si nous ne voulons pas produire d'erreur en raison du nom de table déjà utilisé, nous devons utiliser d'autres méthodes pour vérifier l'existence de la table.
Option 1 :Vérifiez les DBA_TABLES
Afficher
DBA_TABLES
est une vue de dictionnaire de données qui 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 déjà, puis exécuter uniquement le CREATE TABLE
déclaration si elle n'existe pas déjà.
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:='
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
)';
EXECUTE IMMEDIATE sql_stmt;
END IF;
END;
Résultat :
PL/SQL procedure successfully completed.
Dans ce cas, la table a été créée car aucune table existante ne portait le nom t1
.
Maintenant, si nous essayons de recréer la table, nous obtiendrons la même sortie que la procédure PL/SQL terminée avec succès, et il n'y aura pas d'erreur.
Cependant, si nous essayons simplement de créer la table sans d'abord vérifier son existence, nous obtenons une erreur :
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
);
Résultat :
Error report - ORA-00955: name is already used by an existing object 00955. 00000 - "name is already used by an existing object"
Option 2 : Tester l'erreur
Une autre façon de le faire est simplement d'aller de l'avant et d'exécuter le CREATE TABLE
instruction, puis interceptez toute erreur ORA-00955 qui se produit. Plus précisément, nous interceptons toute erreur SQLCODE -955 qui se produit.
Exemple :
DECLARE
sql_stmt long;
BEGIN
sql_stmt:='
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
)';
EXECUTE IMMEDIATE sql_stmt;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -955 THEN
NULL;
ELSE
RAISE;
END IF;
END;
Résultat :
PL/SQL procedure successfully completed.
J'ai exécuté cela même si le T1
tableau existait déjà. L'erreur ORA-00955 a été détectée et traitée, nous n'avons donc pas reçu de message d'erreur et la table n'a pas été créée.
Si le tableau n'existait pas déjà, le tableau aurait été créé et nous verrions le même résultat.