在 as400 db2 中创建视图

Creating views in as400 db2

如果我在 db2 中创建视图,请这样说:

select 
  RNN(sometable) as rn, 
  c1,c2,c3 
from sometable 
order by rn desc 
fetch first 100 rows only

这实际上会从 table 中提取最后 100 行(我使用 RNN 是因为没有其他任何东西可以作为排序的依据,遗憾的是。这不是我的设计)。我对此的问题是:

我创建此视图的原因是因为我们必须从超过 3000 万个条目的 table 中提取一些信息,并且无法真正排序或索引该信息(同样,不是我的设计,而是软件创造者)。

感谢任何帮助!谢谢

编辑:澄清一下,我实际上不能自己去测试这个,或者我会。其一,我不知道创建我们自己的观点的含义(因此是最后一个问题),其二,我主要是在收集研究成果以呈现给我的老板。

编辑:实际上你知道吗,我不会在这里问第二个问题,因为这是一个不同的问题。这不是关于如何找到一个独特的领域或任何一个,这是这个问题的旁注。这是关于构建一个视图,它有任何影响,以及它是否会做我所追求的。

在 DB2 for i 的视图中,外部全查询的定义不支持 ORDER BY 和 FETCH FIRST 子句。

但是,您可以在当前支持的 DB2 for i(6.1、7.1、7.2)版本中使用常见的 table 表达式。

以下是在 7.1 上测试的:

create view myview 
 as ( with tbl as (select RNN(sometable) as rn, 
                          c1,c2,c3 
                          from sometable 
                          order by rn desc 
                          fetch first 100 rows only  
                  )
select * from tbl 
)

在回答您的其余问题时,是的,视图是动态的。每次读取它时,您都会及时获得该时间点的最后 100 行。

但是请注意,即使不按结果排序,使用 RRN 函数也意味着您每次读取这 100 行时都将进行完整的 table 扫描。所以性能可能会很糟糕。

我很难相信没有什么可以创建索引并用于排序。但是,如果确实如此,请考虑添加一列以满足您的需要。在 DB2 for i 中向 table 添加一列相对容易,不需要可怕的 LVLCHK(*NO) 或重新编译现有的 RPG 应用程序。