sql >> Databasteknik >  >> RDS >> Oracle

Oracle DROP TABELL OM FINNS Alternativ

Oracle Database inkluderar inte IF EXISTS klausul som vissa andra DBMS erbjuder i sin DROP TABLE uttalanden. Därför, om vi vill undvika otäcka fel till följd av att vi försöker släppa en icke-existerande tabell, måste vi göra lite extra arbete.

Alternativ 1:Kontrollera om tabellen finns

Vi kan kontrollera DBA_TABLES dataordbokvy ​​för att se om tabellen finns. Denna vy beskriver alla relationstabeller i databasen. Dess kolumner är desamma som de i ALL_TABLES .

Vi kan kontrollera den här tabellen för att se om tabellen finns och sedan köra DROP TABLE uttalande om det gör det.

Exempel:

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 det här fallet, tabellen som heter t1 existerade redan och togs bort.

Nu, om vi kör samma kod igen, får vi samma utdata:

PL/SQL procedure successfully completed.

Inget fel uppstod, även om tabellen inte längre finns.

Men om vi bara försöker släppa tabellen utan att först kontrollera om den finns, får vi ett felmeddelande:

DROP TABLE T1;

Resultat:

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

Alternativ 2:Testa för felet

Ett annat sätt att göra det är att helt enkelt gå vidare och köra DROP TABLE och fånga sedan upp eventuella ORA-00942-fel som uppstår. Specifikt fångar vi alla SQLCODE -942-fel som uppstår.

Exempel:

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

Resultat:

PL/SQL procedure successfully completed.

Jag körde det trots att T1 tabellen fanns inte. ORA-00942-felet fångades och hanterades så vi fick inget felmeddelande.

Om tabellen redan hade funnits skulle tabellen ha tagits bort och vi skulle se samma utdata.


  1. Hur man använder NVL()-funktionen i Oracle

  2. Infoga data i Oracle-databasen med php

  3. MySQL Master To Master Replikering

  4. Använder du namngivna instanser? Testa din DAC-anslutning!