# Delete From Tabelle, ohne vorher die Tabelle zu kennen



## vodn7v (31. Mrz 2009)

Hallo, ich habe viele Tabellen die mit einem bestimmten zeichensatz anfangen, ca so:

egh_miz_infotype_0000
egh_miz_infotype_0001
egh_miz_infotype_0002
egh_miz_infotype_0003
egh_miz_infotype_0004
egh_miz_infotype_0005
.....

etc und so weiter.

ich möchte irgednwie soetwas ausführen.

DELETE FROM "tabellenName LIKE ''egh_miz_infotype_";
also das er alle Tabelleninhalte einmal löscht die mit dieser bezeichnung anfangen.

Geht sowas??


Danke euch !!


----------



## HoaX (31. Mrz 2009)

Wenn es die Datenbank anbietet dann gehts, wenn nicht dann nicht. Standard-SQL ist das jedenfalls nicht.


----------



## Ebenius (31. Mrz 2009)

Entweder es geht über ein CallableStatement mit einer von Dir auf geschriebenen (stored) Procedure. Oder es geht nicht. Oder es heißt MicroSoft-Irgendwas; da bin ich nie verwundert wenn Dinge passieren die nicht passieren dürfen. 

Ich glaube, Du könntest -- sofern das DBMS Dir das Recht gewährt -- das DB-Metadata-Gedöhns holen und dann die Tabellennamen in Java rausfinden: Connection.getMetaData(). Nicht, dass ich sowas schon gemacht hätte / mich damit auskennen würde.

Ebenius


----------



## KSG9|sebastian (31. Mrz 2009)

In den Systemtabellen gibt es meist auch ne Tabelle mit allen Namen, z.b. sysibm.tables

Dort kannst du alle Namen selektieren, prüfen ob der Name mit deinem Pattern übereinstimmt und dann entsprechend löschen.
Allerdings brauchst der User dazu entsprechende Rechte und die Datenbank muss das unterstützen.

Über die Metadata o.ä. müsste es auch gehen


----------



## MarcB (31. Mrz 2009)

Viele DBMS haben intern ein Informationsschema (ist ja auch Sql92-Standard).
Bei MySql heißt das z.B. information_schema (ich meine bei MSSql und Postgre ist das auch so). In dem Schema gibts die Tabelle "Tables" in dem alle verwalteten Tabellen stehen.

Dort müsste man halt einen Select absetzen, um die ganzen Tabellennamen, die mit deinem Muster "egh_miz_infotype_" beginnen.

select t.table_name from information_schema.tables t where t.table_name like 'egh_miz_infotype_%'

Dann könnte man im Programm über die Collection iterieren um diese Tabellen zu löschen oder zu leeren.


----------



## JanHH (1. Apr 2009)

Das klingt aber alles so, als gäbe es jede Menge Tabellen, die während der Laufzeit der Applikation dynamisch erzeugt werde. Das widerspricht eigentlich dem Dogma, das man lieber ein festes Datenbankschema haben sollte. Vielleicht ist das die Lösung für das Problem?


----------

