Hallo,
gibt es eine Möglichkeit unter Oracle 9i über die gesamte Datenbank nach einem bestimmten Text zu suchen?
z.B. so in etwa:
SELECT * FROM allTables
WHERE (Textinhalt LIKE UPPER(’%test’)
OR Textinhalt LIKE UPPER(‚test%‘)
OR Textinhalt LIKE UPPER(’%test%’))
Es sollten also auch Textteile gefunden werden. Egal ob der Text am Anfang, Ende oder mittendrin vorkommt.
Gibt’s da eine SELECT-Möglichkeit oder ein Programm, das so was kann?
Ich hab’ nämlich keine Lust alle Tabelle der DB zu durchsuchen.
DANKE & Grüße
ANDI 
Hallo,
leider ist es nicht ganz so einfach:
- Ich weiß nicht wie die ganzen Felder aller Tabellen heissen, in denen generell Text vorkommen könnte.
Eine Suchtabelle fällt damit flach. Außerdem weiss ich nicht wirklich, in wie vielen Tabellen/Spalten der Text vorkommen kann.
- Ich muss die Spaltennamen wissen, da ich danach alle Felder, in denen der Text vorkommt bearbeiten muss.
Ach ja:
Gibt’s da vielleicht auch eine Möglichkeit? Der vorkommende Text soll nämlich im zweiten Schritt durch einen anderen ersetzt werden.
DANKE für die Mühe
ANDI 
- Hmm direkt geht das so nicht. Wir haben dies und ähnliche
Fragestellungen mithilfe der ORACLE.TEXT Option gelöst. Sind
es nur ein paar wenige Felder in verschieden Tabellen, wäre es
auch möglich, dies in eine „Suchtabelle“ zu schrieben
(n-Felder --> 1 Feld) und dort zu suchen, allerdings weisst
du dann nicht mehr, woher der Treffer kommt
- Dann gibt es die Möglichkeit, via Dynamic SQL und den Metadaten des Schemas dir einen SQL erstellen zulassen. Am besten machst du dies in einer PL/SQL Procedur. Der erste Ansazt wäre, sich in das in Frage kommende Schmema einzuloggen :
select * from USER_TAB_COLS
where DATA_TYPE =‚VARCHAR2‘
- Dies gibt dir alle Felder vom Typ Varchar2 im aktuellen Schema und ihre zugehörige Tabellen (allerdings auch die Views…)
Wenn du dies in einen Cursor lädst und innerhalb eines Loops deinen SQL aufbaust, sollte es klappen
Dies ist aber :
- Sehr umständlich
- Eher nicht performant
- Du brauchst dazu Zugriffsberechtigungen auf die DBA_VIEWS
Wenn es ein einmaliges Update sein soll, wäre es auf jeden Fall besser, die entsprechende Felder zu identifizieren und gezielt Update-Statements zu schreiben
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Ulrich,
für welche DBA_… Views benötigt er denn da Rechte? Erschließt sich mir nicht, kannst du das bitte erläutern?
Grüße,
Guido