在as400中创建视图db2

时间:2015-05-05 13:29:37

标签: db2 ibm-midrange

如果我在db2中创建一个视图,请说:

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

这基本上会从表中拉出最后100行(我使用RNN,因为没有别的东西可以根据那种排序了,遗憾的是。不是我的设计)。我对此的疑问是:

  • 此视图会随着某些内容的更新而自动更新
  • 此视图更具体地说是删除不匹配的行。例如,假设它从具有1000的文件中拉出最后100行。有些添加了一行,是否删除了具有最低RN的行并添加了新行?
  • 这样做有什么缺点吗?例如,更新父表时的性能等等。或者,是否存在任何兼容性问题(如果我选择一个独特的视图名称,并且不太可能被运行在其上的任何其他内容使用,那么实际创建我们自己的视图名称是否安全请注意,我们实际上并没有维护系统本身运行的软件。)

我创建此视图的原因是因为我们必须从包含超过30米条目的表中提取一些信息,并且无法真正对该信息进行排序或索引(同样,不是我的设计,而是软件创建者) )。

任何帮助表示赞赏!感谢

编辑:澄清我实际上不能自己去测试,或者我会。对于一个我不知道创建我们自己的观点的影响(因此最后一个问题的子弹),两个我主要收集研究呈现给我的老板。

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

1 个答案:

答案 0 :(得分:3)

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

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

以下是在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行时都会进行全表扫描。所以表现可能很糟糕。

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