DB2-Äquivalent für MySQLs DROP. WENN EXISTIERT

7

Gibt es in DB2 ein Äquivalent für MySQL (oder PostgreSQL):

DROP TABLE IF EXISTS sometable;

Ivotron
quelle

Antworten:

4

Nein.

Sie benötigen eine IFKlausel, um die Existenz der Tabelle zu überprüfen, und eine separate Anweisung, um sie tatsächlich zu löschen, falls sie vorhanden ist.

Nick Chammas
quelle
1
@ivotron: Nick hat Recht mit diesem. Ein Beispiel für Nicks Antwort finden Sie in StackOverflow: stackoverflow.com/a/3976691/491757 . Übrigens +1 für Nick !!!
RolandoMySQLDBA
2

Eine alternative Lösung ist hier angegeben :

Erstellen Sie die gespeicherte Funktion db2perf_quiet_drop():

CREATE PROCEDURE db2perf_quiet_drop( IN statement VARCHAR(1000) )
LANGUAGE SQL
BEGIN
   DECLARE SQLSTATE CHAR(5);
   DECLARE NotThere    CONDITION FOR SQLSTATE '42704';
   DECLARE NotThereSig CONDITION FOR SQLSTATE '42883';

   DECLARE EXIT HANDLER FOR NotThere, NotThereSig
      SET SQLSTATE = '     ';

   SET statement = 'DROP ' || statement;
   EXECUTE IMMEDIATE statement;
END

und benutze es als Begin atomic call db2perf_quiet_drop('table my_table'); End

dma_k
quelle
2

Sie können einen anonymen Block verwenden

BEGIN
 DECLARE CONTINUE HANDLER FOR SQLSTATE '42704'
   BEGIN END;
 EXECUTE IMMEDIATE 'DROP TABLE sometable';
END @
AngocA
quelle