Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle DROP TABLE АКО СЪЩЕСТВУВА Алтернативи

Oracle Database не включва IF EXISTS клауза, която някои други СУБД предлагат в своя DROP TABLE изявления. Ето защо, ако искаме да избегнем неприятни грешки, произтичащи от опит за премахване на несъществуваща таблица, трябва да свършим малко допълнителна работа.

Опция 1:Проверете дали таблицата съществува

Можем да проверим DBA_TABLES изглед на речник на данни, за да видите дали таблицата съществува. Този изглед описва всички релационни таблици в базата данни. Неговите колони са същите като тези в ALL_TABLES .

Можем да проверим тази таблица, за да видим дали таблицата съществува, след което стартираме само DROP TABLE изявление, ако е така.

Пример:

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;

Резултат:

PL/SQL procedure successfully completed.

В този случай таблицата, наречена t1 вече съществуваше и беше премахнато.

Сега, ако изпълним отново същия код, получаваме същия изход:

PL/SQL procedure successfully completed.

Не е възникнала грешка, въпреки че таблицата вече не съществува.

Ако обаче просто се опитаме да пуснем таблицата, без първо да проверим за нейното съществуване, получаваме грешка:

DROP TABLE T1;

Резултат:

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

Опция 2:Тествайте за грешката

Друг начин да го направите е просто да продължите напред и да стартирате DROP TABLE изявление и след това хванете всяка възникнала грешка ORA-00942. По-конкретно, ние улавяме всяка възникнала грешка в SQLCODE -942.

Пример:

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

Резултат:

PL/SQL procedure successfully completed.

Пуснах това, въпреки че T1 маса не съществуваше. Грешката ORA-00942 беше уловена и обработена, така че не получихме съобщение за грешка.

Ако таблицата вече е съществувала, таблицата щеше да бъде премахната и щяхме да видим същия изход.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразуване на цифри/числа в думи за валута INR (индийски рупии) в Oracle PL/SQL

  2. Oracle сравнява времеви печат с дата

  3. Запомнете RAC екземпляри в Perf Tools

  4. Как да показвате коментари на колона с операция desc

  5. Вземане на запис с максимална дата