0

我正在尝试编写一个一次性(就像永远不会再次运行)脚本来收集有关我们产品某些功能的使用情况的信息。这是我现在拥有的简化脚本:

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”的内部循环中遇到错误。我也尝试将它作为连接字符串传递,但无济于事。我需要做什么才能使其正常工作?

4

1 回答 1

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 ),特别是本节将允许您拥有动态嵌套 FOR..LOOP。

老实说,尽管对于一次性脚本而言,这可能不值得付出努力。

于 2013-09-11T16:22:30.200 回答