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.
'tname' ist ein Datensatz. Sie brauchen 'tname.tabellenname'. Ihr nächstes Problem wird sein, was mit den Ergebnissen zu tun ist. –