如何在sql中将表名与for循环中的变量连接起来

时间:2013-09-11 15:55:49

标签: sql oracle11g

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

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

1 个答案:

答案 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。

老实说,虽然对于一次性的剧本来说,这可能是不值得的。