在您的代码中tname
是一个引用游标结果集的记录,即一个名称空间而不是一个属性。解决这个问题是这样的:
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;
人们希望列名为ID将返回唯一行而不需要unique
关键字,但我们生活在乱世。您的代码需要将结果选择到某些内容:PL/SQL不是T-SQL,它需要目标变量。所以让我们再改进一下你的代码。
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;
也许这不是你想用ID做的事情。如果是这样,请编辑您的问题以阐明您的意图。
来源
2017-05-15 15:44:44
APC
'tname'是一个记录。你需要'tname.table_name'。你的下一个问题将是如何处理结果。 –