Db2 视图中的延迟表名解析

Db2 视图中的延迟表名解析,db2,db2-400,Db2,Db2 400,我能看到桌子上方的景色。事实证明,每天晚上都会移动表格并创建更新版本。这确保了数据库中始终存在一个具有预期名称的表,但我无法找到使视图继续指向该表的当前版本的方法。创建视图时存在的任何表都是我最终指向的表,即使在它移动并过时之后也是如此 视图A: select a, b, c from todays_table; todays\u table全天保持当前状态,然后在晚上将其重命名为todays\u table01。视图A现在指向todays\u table 01,此时将显示一个名为todays

我能看到桌子上方的景色。事实证明,每天晚上都会移动表格并创建更新版本。这确保了数据库中始终存在一个具有预期名称的表,但我无法找到使视图继续指向该表的当前版本的方法。创建视图时存在的任何表都是我最终指向的表,即使在它移动并过时之后也是如此

视图A:

select a, b, c from todays_table;
todays\u table
全天保持当前状态,然后在晚上将其重命名为
todays\u table01
。视图A现在指向
todays\u table 01
,此时将显示一个名为
todays\u table
的新表。同样,
todays\u table
是当前的,但是
ViewA
不再是

是否有办法延迟表名解析,直到使用视图为止?我无法为
SELECT
语句获取
executeimmediate
working。我想如果我使用游标,我可以让动态SQL语句工作,但我以前从未需要过这些,我不确定它们是否是正确的路径。我读到了有关AUTO_REVAL的文章,但我相信这只会延迟分辨率,直到第一次使用视图时,当晚仍然会过时

当然,我可以停止使用视图,只将复杂的查询移动到我的程序中,但是有很多地方需要它,所以我想在回到这个问题之前消除所有其他的解决方案

这将是理想的消除临时表,只是有主表接收更新整天,但这是超出我的理解,因为我不知道任何关于RPG II和OCL

谢谢你的阅读

编辑 根据@Llama先生的建议,我尝试使用同义词和别名指向
todays\u表
,然后让我的观点指向同义词。不幸的是,在这种情况下,视图在创建时使用别名解析实际的表名,因此当视图重命名为
todays\u table 01
时,视图继续指向
todays\u table
,尽管别名继续引用
todays\u table

编辑2 我接受@mustaccio的答案,因为它确实有效,而且如果我能让参数在需要的地方运行,它将是解决这个问题的合理方法。我的特定项目需要灵活性,所以我实际上要跳上每晚的流程潮流,添加一个程序,在流程与引用发生冲突后重新创建我的视图,如@danny117所建议的那样


感谢所有回复的人,我学到了很多关于所有这些部分如何协同工作的知识。

我认为,通过将视图定义包装到SQL表函数中,您可能能够实现您想要的功能,例如

CREATE FUNCTION insteadofview (<parameters>)
RETURNS TABLE (<columns>)
...
RETURN
  SELECT <the rest of your view definition>
创建函数而不是视图()
返回表()
...
返回
挑选
根据查询视图的方式,可能需要将搜索条件作为参数传递到函数中,否则性能将不理想,因为函数必须在应用搜索参数之前返回查询中的所有行

,正如您所注意到的,重命名的表上的视图继续指向原始表对象。但是,例程(包括表函数)将失效,并且在下次调用时使用原始源表名重新准备它们的计划

但是我没有办法测试这个


.

听起来像是同义词的工作。将视图指向同义词,然后更新同义词以指向当前的“活动”表。进入创建新的每日表的过程并在那里创建视图。每次使用前创建并替换视图。我非常感谢您的回答@Llama先生,我对同义词和别名进行了一些测试,但它们的行为与我预期的一样——它们在被重命名时也遵循
todays\u table
,而不是继续指向名称。另外,编写指向同义词或别名的视图似乎会在创建时解析实际的表名,而不是继续引用同义词@danny117在每次使用之前创建视图的级别高于将查询直接放入代码中的级别,尽管我希望有更好的解决方案。这个过程是OCL、RPG II、CL和RPG/400的一团乱麻——恐怕……更正我的评论,同义词继续指向正确的位置,但视图没有,因为它似乎在视图创建时解析为实际的表名。对不起,误传了。谢谢你的回答。这确实管用!我甚至可以为UDTF创建一个视图,这样用户就不必关心细节了。正如您所提到的,缺点是性能。当我将视图更改为指向UDTF的shell时,我的查询大约需要14秒。当不涉及UDTF时,随着查询优化器的启动,同一查询需要5秒钟的时间,然后在后续执行时需要2.9秒。查询优化器似乎不知道如何处理UDTF(可以理解)。我确信,如果我按照建议向UDTF添加参数,性能会更好。