Kategorie szkoleń | Egzaminy | Kontakt
  • 3
  • 1
  • 1.1K

Chciałbym znaleźć w bazie danych schemat, tablicę oraz kolumnę, która zawiera określony ciąg znaków. Jestem na 100% pewien, że dana baza danych zawiera w którymś miejscu słowo: "EXTERNAL_OFFICE_ID". Jak znaleźć, która baza danych/schemat, tabela i która kolumna zawiera takie informacje?

Grzegorz_Błoński
  • Zapytał
  • @ Grzegorz_Błoński | 31.03.2014
    • 5
    • 0
    • 4

Odpowiedzi (3)

  • 3

W przypadku bazy danych Oracle, wystarczy przeszukać odpowiedni słownik systemowy - w tym przypadku all_tab_cols lub dba_tab_cols (w zależności od uprawnień). Oczywiście, w słownikach zobaczymy tylko takie obiekty, które "widzieć" mamy prawo. Jeśli zatem nie mamy praw dostępu do jakiejś tabeli, to oczywiście słownik nie poinformuje nas o nazwach zawartych w niej kolumn!

Poniżej gotowy kod:

 

select owner as schemat, table_name as tabela, column_name as kolumna, data_type as typ
  from dba_tab_cols 
 where column_name = upper('&nazwa_kolumny');

 

 

  • Odpowiedział
  • @ | 01.04.2014
  • TRENER MODERATOR ALTKOM AKADEMII
  • 0

Dzięki Cezary za odpowiedź, ale to nie jest do końca to, o co mi chodziło. Ja nie szukam "nazwy kolumny", tylko jaka to jest kolumna, która w którymś wierszu zawiera mój szukany string.

Dajmy na to przykład:

Wiem z aplikacji, że gdzieś w bazie danych jest przechowywana wartość, która zawiera słowo "Asia". Jak teraz mam znaleźć, która to tabela i w której kolumnie pojawia się takie wystąpienie?

Podejrzewam, że musi być skrypt, który będzie przechodził po wszystkich tabelach i wierszach tych tabel do momentu, aż nie znajdzie wszystkich dopasowań. Dodam, że nie dbam o wydajność i obciążenie, ponieważ chciałbym to zrobić na środowisku testowym, więc baza danych może być zajeżdżana nawet przez tydzień.

Pozdrawiam,

Grzesiek

Grzegorz_Błoński
  • Odpowiedział
  • @ Grzegorz_Błoński | 01.04.2014
    • 5
    • 0
    • 4
  • 3

Jeśli tylko użytkownik bazodanowy, na którego się logujesz posiada prawa do danej tabeli i kolumny, to można na podstawie danych z w/w słowników systemowych, tworzyć wyrażenie dynamiczne (pakiet DBMS_SQL lub klauzula EXECUTE IMMEDIATE) zawierające wyszukiwania operatorem LIKE po wszystkich kolumnach określonej tabeli.

  • Odpowiedział
  • @ | 28.05.2014
  • TRENER MODERATOR ALTKOM AKADEMII