Maison >base de données >tutoriel mysql >Comment vérifier l'existence d'une table et effectuer des opérations DDL conditionnelles dans Oracle ?
Contrairement à MySQL, la base de données Oracle n'a pas de syntaxe IF EXISTS
directe pour les opérations sur les tables. Cependant, nous pouvons obtenir des fonctionnalités similaires grâce aux méthodes suivantes.
Le moyen le plus efficace est d'intercepter l'exception "la table n'existe pas" :
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'DROP TABLE ' || table_name; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;</code>
Cette méthode évite d'avoir à vérifier si la table existe deux fois comme les autres méthodes.
IF EXISTS
Syntaxe (Oracle 23c et supérieur) À partir de la version 23c d'Oracle, toutes les DROP
opérations DDL prennent en charge la syntaxe IF EXISTS
plus simple :
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'DROP TABLE IF EXISTS ' || table_name; END;</code>
Des blocs de gestion d'exceptions similaires peuvent être utilisés pour d'autres types d'objets Oracle :
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE ' || sequence_name; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;</code>
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'DROP VIEW ' || view_name; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;</code>
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'DROP TRIGGER ' || trigger_name; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -4080 THEN RAISE; END IF; END;</code>
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'DROP INDEX ' || index_name; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -1418 THEN RAISE; END IF; END;</code>
<code class="language-sql">BEGIN EXECUTE IMMEDIATE 'ALTER TABLE ' || table_name || ' DROP COLUMN ' || column_name; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -904 AND SQLCODE != -942 THEN RAISE; END IF; END;</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!