DROP-Anweisung (SQL/Oracle)

Mit der DROP-Anweisung können Datenbankobjekte wieder aus der Datenbank entfernt werden, die zuvor mittels einer entsprechenden CREATE-Anweisung erstellt und/oder ggf. mit einer ALTER-Anweisung geändert wurden. Sie gehört zum Sprachumfang der SQL-DDL.

Syntax der DROP Anweisung (Auszug):

 <DROP-Anweisung> ::=
     { DROP TABLE Tabellenname          [ CASCADE CONSTRAINTS ] [PURGE];
     | DROP VIEW  Sichtname             [ CASCADE CONSTRAINTS ];
     | DROP MATERIALIZED VIEW Sichtname [ PRESERVE TABLE ];
     | DROP INDEX Indexname;
     | DROP SEQUENCE Sequenzname;
     | ... 

Bei Tabellen? werden neben den Data-Dictionary-Informationen werden auch die persistent gespeichert Daten gelöscht.

CASCADE CONSTRAINTS ist eine ORACLE-Erweiterung, die auch alle CONSTRAINTS z.B. Fremdschlüssel entfernt, die sich auf die Tabelle beziehen. PURGE ist einer andere Oracle-Option, die die Tabelle endgültig aus dem Papierkorp (Recyclebin) löscht. Die VIEWS und Synonyme, Prozeduren, Funktionen und Packages, die sich auf die gelöschte Tabelle beziehen, bleiben zwar nach einem DROP TABLE erhalten, werden jedoch in der Data Dictionary-View USER_OBJECTS auf den Status 'INVALID' gesetzt und können nicht mehr verwendet werden. Für eine Wiederverwendung müßte die Tabelle wieder erzeugt werden oder die Objekte werden umprogrammiert, so dass sie die gelöschte Tabelle nicht mehr verwenden. Etwas anders sieht es bei den abhängigen Objekten der Indizes und TRIGGER aus, die werden gleich mitgelöscht.


Da bei virtuellen Sichten ja keine Daten persistent gespeichert werden, ist es für deren Löschung ausreichend, wenn die Einträge aus dem Data-Dictionary entfernt werden.

Beim Oracle-DBS werden virtuelle Sichten solange nicht gelöscht, wie sich noch andere virtuelle oder materialisierte Sichten oder Synonyme auf sie beziehen, denn diese würden dann mit dem Löschen der Sicht unbrauchbar. Wenn einige Sub-Sichten auf einer Sicht definiert wurden, setzt die Datenbank diese Sub-Sichten ebenfalls außer Kraft. Um zu bestimmen, ob die Sicht einige Sub-Sichten beinhaltet, kann die Spalte SUPERVIEW_NAME der Data-Dictionary-Sichten USER_VIEWS, ALL_VIEWS oder DBA_VIEWS abgefragt werden.


Da bei materialisierten Sichten die abgeleiteten Daten persistent gespeichert werden, werden es bei deren Löschung neben den Einträgen aus dem Data-Dictionary auch die persistenten Daten gelöscht.

Zum Löschen, wenn abhängige Sichten, Synonyme oder Subsichten bestehen gelten die analogen Aussagen wie bei den zuvor genannten virtuellen Sichten.

Die PRESERVE-TABLE-Option beinhaltet, dass der Speicherplatz der Tabellen und deren Inhalte der materialisierten Sicht beibehalten werden, nachdem das Objekt der materialisierten Sicht gelöscht wurde. Die daraus resultierende Tabelle erhält den Namen der gelöschten materialisierten Sicht, ist aber nun ohne jeglichen Aktualisierungsmechanismus zu den Ursprungstabellen. Es handelt sich also weniger um das Löschen, als vielmehr um das Umwandeln einer materialisierten Sicht in eine Tabelle.


Wird ein Index gelöscht, so werden die Verwaltungsinformationen aus dem Data-Dictionary wie auch die persistent gespeichert Daten des Index gelöscht. Die Tabelle, zu der dieser Index gehhört, bleibt samt Daten unberührt von dieser Aktion.


Wird eine Sequenz gelöscht, so werden die Verwaltungsinformationen aus dem Data-Dictionary entfernt. Wird diese Sequenz später dann wieder erzeugt, so startet sie neu bei dem START WITH-Wert bzw. bei 1, aber nicht bei der letzten vergebenen Nummer.

Beispiele

  -- Es wird die Tabelle Teile gelöscht samt ihren Daten
  -- und abhängigen Objekten wie Trigger, Indizes, ...
  DROP TABLE Teile CASCADE CONSTRAINTS; 

  -- Es wird die Sicht gelöscht und ggf. existierende Fremdschlüssel-Constraints, 
  -- die auf diese Sicht refernezeiren gleich mit.
  DROP VIEW Angestellte_abteilung_w CASCADE CONSTRAINTS ;

  -- Es wird eine materialisierte Sicht umgewandelt in eine Tabelle. 
  -- Die eigentlichen abgeleiteten Daten bleiben in der nun nur noch 
  -- als Tabelle existierenden Angestellte_Abteilung_mv erhalten. 
  DROP MATERIALIZED VIEW Angestellte_Abteilung_mv  PRESERVE TABLE;

Quellen:

  • INCITS/ISO/IEC 9075-1-2008. Part 1 "SQL/Framework", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
  • INCITS/ISO/IEC 9075-1-2008. Part 2 "SQL/Foundation", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
  • Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, München, 2002, ISBN 3-8273-7021-3
  • Melton, Jim/Simon, Alan R.: "SQL: 1999 - Understanding Relational Language Components", Morgan Kaufmann, San Francisco, 2001, ISBN 1558604561
  • Oracle® Database SQL Language Reference 11g Release 2 (11.2), E17118-03, August 2010, http://download.oracle.com/docs/cd/E11882_01/server.112/e17118.pdf
  • Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2

Kategorie: SQL, D