在 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 是因为没有其他任何东西可以作为排序的依据,遗憾的是。这不是我的设计)。我对此的问题是:
- 这个视图是否随着一些table的更新而自动更新
- 这个视图,更具体地说,是否删除不匹配的行。例如,假设它从一个有 1000 行的文件中提取最后 100 行。有人添加了一行,是否删除了具有最低 RN 的行并添加了新行?
- 这样做有什么缺点吗?例如,更新父 table 时的性能等。或者,是否存在任何兼容性问题(如果我选择一个唯一的视图名称,并且不太可能被其他 运行 使用,实际创建我们自己的视图是否安全?请记住,我们实际上并不在系统本身上维护软件 运行)。
我创建此视图的原因是因为我们必须从超过 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 应用程序。
如果我在 db2 中创建视图,请这样说:
select
RNN(sometable) as rn,
c1,c2,c3
from sometable
order by rn desc
fetch first 100 rows only
这实际上会从 table 中提取最后 100 行(我使用 RNN 是因为没有其他任何东西可以作为排序的依据,遗憾的是。这不是我的设计)。我对此的问题是:
- 这个视图是否随着一些table的更新而自动更新
- 这个视图,更具体地说,是否删除不匹配的行。例如,假设它从一个有 1000 行的文件中提取最后 100 行。有人添加了一行,是否删除了具有最低 RN 的行并添加了新行?
- 这样做有什么缺点吗?例如,更新父 table 时的性能等。或者,是否存在任何兼容性问题(如果我选择一个唯一的视图名称,并且不太可能被其他 运行 使用,实际创建我们自己的视图是否安全?请记住,我们实际上并不在系统本身上维护软件 运行)。
我创建此视图的原因是因为我们必须从超过 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 应用程序。