sql >> Databáze >  >> RDS >> Oracle

Oracle DROP TABLE, POKUD EXISTUJE Alternativy

Oracle Database nezahrnuje IF EXISTS klauzule, kterou některé jiné DBMS nabízejí ve své DROP TABLE prohlášení. Chceme-li se tedy vyhnout ošklivým chybám vyplývajícím z pokusu o zrušení neexistující tabulky, musíme udělat trochu práce navíc.

Možnost 1:Zkontrolujte, zda tabulka existuje

Můžeme zkontrolovat DBA_TABLES zobrazení datového slovníku, abyste zjistili, zda tabulka existuje. Tento pohled popisuje všechny relační tabulky v databázi. Jeho sloupce jsou stejné jako sloupce v ALL_TABLES .

Můžeme zkontrolovat tuto tabulku, abychom zjistili, zda tabulka existuje, a poté spusťte pouze DROP TABLE prohlášení, pokud ano.

Příklad:

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;

Výsledek:

PL/SQL procedure successfully completed.

V tomto případě tabulka nazvaná t1 již existoval a byl zrušen.

Nyní, když spustíme stejný kód znovu, dostaneme stejný výstup:

PL/SQL procedure successfully completed.

Nedošlo k žádné chybě, i když tabulka již neexistuje.

Pokud se však jednoduše pokusíme zrušit tabulku, aniž bychom nejprve zkontrolovali její existenci, dostaneme chybu:

DROP TABLE T1;

Výsledek:

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

Možnost 2:Test na chybu

Dalším způsobem, jak to udělat, je jednoduše pokračovat a spustit DROP TABLE a poté zachyťte jakoukoli chybu ORA-00942, která nastane. Konkrétně zachytíme jakoukoli chybu SQLCODE -942, která nastane.

Příklad:

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

Výsledek:

PL/SQL procedure successfully completed.

Spustil jsem to, i když T1 stůl neexistoval. Chyba ORA-00942 byla zachycena a ošetřena, takže jsme neobdrželi chybovou zprávu.

Pokud by tabulka již existovala, tabulka by byla zrušena a my bychom viděli stejný výstup.


  1. Zjistěte, do kterého čtvrtletí v Oracle patří datum

  2. Historie databází

  3. Vraťte řádky, které obsahují nealfanumerické znaky na serveru SQL

  4. Proč jsou vícenásobná připojení špatná pro dotaz nebo nebrání optimalizaci