2017-05-15 4 views
0

Ich möchte alle IDs in einer Datenbank aus allen Spalten, die ein ID-Feld haben. Mein Skript so weit ist:Erhalten Sie alle IDs in einer Datenbank

BEGIN 
FOR tname IN (select table_name from all_tab_columns where column_name = 'ID' and owner='PACC_USER') LOOP 
    EXECUTE IMMEDIATE 
    'select unique id from ' || tname; 
END LOOP; 
End; 

ich den Fehler PLS-00306: wrong number or types of arguments in call to '||' bekommen. Was ist das Problem genau? Jede Hilfe ist willkommen :)

+4

'tname' ist ein Datensatz. Sie brauchen 'tname.tabellenname'. Ihr nächstes Problem wird sein, was mit den Ergebnissen zu tun ist. –

Antwort

2

In Ihrem Code tname ist ein Datensatz zum Verweisen auf die Cursor-Ergebnismenge, d. H. Ein Namespace kein Attribut. Fix es wie folgt aus:

BEGIN 
    FOR tname IN (select table_name 
        from all_tab_columns 
        where column_name = 'ID' and owner='PACC_USER') 
    LOOP 
     EXECUTE IMMEDIATE 
     'select unique id from ' || tname.table_name ; 
    END LOOP; 
End; 

Man würde hoffen, dass eine Spalte mit dem Namen ID eindeutige Zeilen, ohne das unique Schlüsselwort zurückkehren würde, aber wir leben in unruhigen Zeiten.

Ihr Code muss Ergebnisse in etwas auswählen: PL/SQL ist nicht T-SQL, es erfordert Zielvariablen. Lassen Sie uns Ihren Code ein wenig verbessern.

declare 
    ids_nt sys.dbms-debug_vc2coll; 
BEGIN 
    FOR tname IN (select table_name 
        from all_tab_columns 
        where column_name = 'ID' and owner='PACC_USER') 
    LOOP 
     EXECUTE IMMEDIATE 
      'select unique id from ' || tname.table_name 
      bulk collect into ids_nt; 
     dbms_output.put_line('IDS for table '|| tname.table_name); 
     for idx in ids_nt.first() .. ids_nt.last loop 
      dbms_output.put_line(ids_nt(idx)); 
     end loop; 
    END LOOP; 
End; 

Vielleicht ist das nicht die Art von Sache, die Sie mit den IDs tun möchten. Wenn ja, redigiere deine Frage, um deine Absicht zu klären.

-2

Wählen column_name, Tabellenname von all_tab_column wo oberen (column_name) = oberen ('Id');

Verwandte Themen