Donnerstag, November 21, 2013

Suche in Tabellen ähnlicher Struktur

Wieder war es eine Frage im OTN-Forum, die mich an etwas erinnert hat, das ich fast vergessen hatte: die Möglichkeit, mit Hilfe von XML-Funktionen innerhalb einer Query auf alle Tabellen zuzugreifen, die eine Spalte mit einem bestimmten Namen haben. Wenn ich z.B. herausfinden will, wie viele Datensätze in welchen Tabellen einer Bedingung WHERE DEPTNO = 20 genügen, dann erhalte ich die Antwort über:

-- 11.1.0.7
select owner
     , table_name
     , to_number(
          extractvalue(
                    xmltype(
                            dbms_xmlgen.getxml('select count(*) c from '
                                                || owner || '.'|| table_name 
                                                || ' where deptno = 20')
                            )
                    ,'/ROWSET/ROW/C')) row_count
  from dba_tab_cols
 where column_name = 'DEPTNO'
 order by owner, table_name;
 
OWNER                          TABLE_NAME                      ROW_COUNT
------------------------------ ------------------------------ ----------
SCOTT                          DEPT                                    1
SCOTT                          EMP                                     5

Google erinnert mich gerade daran, dass ich einen Verweis auf Marco Gralikes entsprechenden Artikel schon vor zwei Jahren hier untergebracht hatte, damals allerdings ohne Beispiel. Schon damals war dbms_xmlgen anscheinend nicht mehr unbedingt das Mittel der Wahl, erfüllt aber nach wie vor seinen Zweck.

Keine Kommentare:

Kommentar veröffentlichen