sql >> Database >  >> RDS >> Oracle

Oracle DROP TABLE INDIEN BESTAAT Alternatieven

Oracle Database bevat niet de IF EXISTS clausule die sommige andere DBMS'en aanbieden in hun DROP TABLE verklaringen. Daarom, als we vervelende fouten willen vermijden die het gevolg zijn van het proberen een niet-bestaande tabel te laten vallen, moeten we wat extra werk doen.

Optie 1:Controleer of de tabel bestaat

We kunnen de DBA_TABLES . controleren datadictionary-weergave om te zien of de tabel bestaat. Deze weergave beschrijft alle relationele tabellen in de database. De kolommen zijn dezelfde als die in ALL_TABLES .

We kunnen deze tabel controleren om te zien of de tabel bestaat, en dan alleen de DROP TABLE . uitvoeren verklaring als dat zo is.

Voorbeeld:

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;

Resultaat:

PL/SQL procedure successfully completed.

In dit geval is de tabel met de naam t1 bestond al en is verwijderd.

Als we nu dezelfde code opnieuw uitvoeren, krijgen we dezelfde uitvoer:

PL/SQL procedure successfully completed.

Er is geen fout opgetreden, ook al bestaat de tabel niet meer.

Als we echter gewoon proberen de tabel te laten vallen zonder eerst te controleren of deze bestaat, krijgen we een foutmelding:

DROP TABLE T1;

Resultaat:

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

Optie 2:Test op de fout

Een andere manier om dit te doen, is door gewoon door te gaan en de DROP TABLE . uit te voeren instructie, en vang vervolgens een ORA-00942-fout die optreedt. In het bijzonder vangen we elke SQLCODE -942-fout op die optreedt.

Voorbeeld:

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

Resultaat:

PL/SQL procedure successfully completed.

Ik heb dat uitgevoerd, hoewel de T1 tafel bestond niet. De ORA-00942-fout is opgevangen en afgehandeld, dus we hebben geen foutmelding gekregen.

Als de tafel al had bestaan, zou de tafel zijn verwijderd en zouden we dezelfde uitvoer zien.


  1. CEIL() Functie in Oracle

  2. SQLite verwijderen

  3. hoe stuur e-mail door Pl/sql

  4. Wat is Multi Dimension OLAP CUBE en geef voorbeeld kubus met meer dan 3 dimensies