Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle DROP TABLE IF EXISTS Alternatywy

Baza danych Oracle nie zawiera IF EXISTS klauzula, którą niektóre inne DBMS oferują w ich DROP TABLE sprawozdania. Dlatego jeśli chcemy uniknąć nieprzyjemnych błędów wynikających z próby usunięcia nieistniejącej tabeli, musimy wykonać trochę dodatkowej pracy.

Opcja 1:Sprawdź, czy tabela istnieje

Możemy sprawdzić DBA_TABLES widok słownika danych, aby sprawdzić, czy tabela istnieje. Ten widok opisuje wszystkie tabele relacyjne w bazie danych. Jego kolumny są takie same jak w ALL_TABLES .

Możemy sprawdzić tę tabelę, aby zobaczyć, czy istnieje, a następnie uruchomić tylko DROP TABLE oświadczenie, jeśli tak.

Przykład:

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;

Wynik:

PL/SQL procedure successfully completed.

W tym przypadku tabela o nazwie t1 już istniał i został usunięty.

Teraz, jeśli ponownie uruchomimy ten sam kod, otrzymamy to samo wyjście:

PL/SQL procedure successfully completed.

Nie wystąpił błąd, mimo że tabela już nie istnieje.

Jeśli jednak po prostu spróbujemy usunąć tabelę bez uprzedniego sprawdzenia jej istnienia, otrzymamy błąd:

DROP TABLE T1;

Wynik:

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

Opcja 2:Test pod kątem błędu

Innym sposobem na to jest po prostu uruchomienie DROP TABLE instrukcji, a następnie przechwyć występujący błąd ORA-00942. W szczególności wyłapujemy każdy błąd SQLCODE -942, który wystąpi.

Przykład:

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

Wynik:

PL/SQL procedure successfully completed.

Uruchomiłem to, mimo że T1 tabela nie istniała. Błąd ORA-00942 został wykryty i obsłużony, więc nie otrzymaliśmy komunikatu o błędzie.

Gdyby tabela już istniała, zostałaby usunięta i zobaczylibyśmy to samo wyjście.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Polecenie buforowania:nie wyprowadzaj instrukcji SQL do pliku

  2. Wielkie litery w nazwiskach osób w programowaniu

  3. Powiadomienie o zmianie bazy danych Oracle

  4. Zamek Liquibase - powody?

  5. tabela przestawna Oracle - jak zamienić pozycje wierszy na kolumny