sql >> Database teknologi >  >> RDS >> Oracle

Oracle DROP TABEL HVIS FINDER Alternativer

Oracle Database inkluderer ikke IF EXISTS klausul, som nogle andre DBMS'er tilbyder i deres DROP TABLE udsagn. Derfor, hvis vi vil undgå grimme fejl som følge af at forsøge at droppe en ikke-eksisterende tabel, er vi nødt til at gøre lidt ekstra arbejde.

Mulighed 1:Tjek, om tabellen eksisterer

Vi kan tjekke DBA_TABLES dataordbogsvisning for at se, om tabellen eksisterer. Denne visning beskriver alle relationelle tabeller i databasen. Dens kolonner er de samme som dem i ALL_TABLES .

Vi kan kontrollere denne tabel for at se, om tabellen eksisterer, og derefter kun køre DROP TABLE erklæring, hvis det gør.

Eksempel:

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;

Resultat:

PL/SQL procedure successfully completed.

I dette tilfælde er tabellen kaldet t1 eksisterede allerede og blev droppet.

Nu, hvis vi kører den samme kode igen, får vi det samme output:

PL/SQL procedure successfully completed.

Der opstod ingen fejl, selvom tabellen ikke længere eksisterer.

Men hvis vi blot forsøger at droppe tabellen uden først at kontrollere dens eksistens, får vi en fejl:

DROP TABLE T1;

Resultat:

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

Mulighed 2:Test for fejlen

En anden måde at gøre det på er simpelthen at gå videre og køre DROP TABLE sætning, og fange derefter enhver ORA-00942-fejl, der opstår. Specifikt fanger vi enhver SQLCODE -942 fejl, der opstår.

Eksempel:

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

Resultat:

PL/SQL procedure successfully completed.

Jeg kørte det, selvom T1 tabellen eksisterede ikke. ORA-00942-fejlen blev fanget og håndteret, så vi fik ikke en fejlmeddelelse.

Hvis tabellen allerede havde eksisteret, ville tabellen være blevet slettet, og vi ville se det samme output.


  1. Sådan eksporteres forespørgselsresultat til .csv eller tabulatorsepareret fil i SQL Server Management Studio(SSMS) - SQL Server / TSQL Selvstudium Del 23

  2. Sammenligning af Oracle MySQL, Percona Server og MariaDB

  3. Ti måder dit dataprojekt kommer til at mislykkes på

  4. 12c Adaptive planer