我正在尝试编写一次(因为永远不会再次运行)脚本来收集有关我们产品某些功能的使用情况的信息。这是我现在的简化脚本:
begin
for db in (select owner from dba_tables where table_name='feature_table') loop
begin
for info in (select * from db.owner.feature_table where something='important') loop
begin
dbms_output.put_line(db.owner||' , '||info.type||' , '||info.source);
end;
end loop;
end;
end loop;
end;
我在“db.owner.feature_table”的内部循环中收到错误。我也尝试将它作为连接字符串传递,但无济于事。我需要做些什么才能让它发挥作用?
答案 0 :(得分:3)
你遇到的问题是:
的结果for db in (select owner from dba_tables where table_name='feature_table') loop
是一个内存记录,由一个字段,所有者组成。它不是一个数据库表,您的嵌套FOR..LOOP无法查询它。 db.owner.feature_table
引用内存中的记录,而feature_table不是db.owner的属性。
实现您尝试的内容的一个选项是使用动态SQL(http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/dynamic.htm),特别是this section,这将允许您拥有动态嵌套的FOR..LOOP。
老实说,虽然对于一次性的剧本来说,这可能是不值得的。