2009-02-04 79 views
1

我在SQL环境中有一个需求,在特定情况下,过程中对表(或视图)A的所有引用实际上都使用表(或视图)B.在iSeries上,我将使用OVRDBF命令来覆盖对表A与表B:OVRDBF文件(A)文件(B)。在SQL中等同于什么?有一个吗?是否存在与SQL中的iSeries OVRDBF命令等效的内容?

我的目标是结束一个无视覆盖的过程。我不希望在满足某些条件时指导表B中的处理的过程中使用条件逻辑。愿景:

典型的情况下:只要调用程序

在特定的替代情况:执行OVRDBF当量,然后调用程序

回答

1

不知道该SQL环境支持的选项:

我相信DB2有一个CREATE ALIAS语句。将SQL写入别名。

另一种可能性:在视图上运行查询:在哪里执行OVRDBF,放下视图并将其重建到所需的表格上。

+1

我不喜欢这个答案的唯一的事情是,这两个选项涉及临时覆盖每个人的参考。假设你想让其他进程在'普通'对象上运行,可能涉及到一个额外的模式或类似的东西是合适的? – JBell6 2009-02-04 23:32:24

1

爱德提到,如果你可以修改你的程序:

1)创建文件的别名(A)

CREATE ALIAS XYZ FOR A 

2)修改程序引用,而不是A. XYZ

3)运行程序时使用文件B执行

DROP ALIAS XYZ; 
CREATE ALIAS XYZ FOR B; 
CALL PROCEDURE; 
DROP ALIAS XYZ; 
CREATE ALIAS XYZ FOR A; 

如果你不能不同的程序,你不担心同时访问表A,你可以使用:

RENAME TABLE A TO C; 
CREATE ALIAS A FOR B; 
CALL PROCEDURE; 
DROP ALIAS A; 
RENAME TABLE C TO A; 
+0

在我对Ed的评论中,我表达了对使用别名时影响所有用户和进程的担忧。并非所有事情都最终指向别名正在指向的什么?无论如何要让这种方法更具体到单个用户和/或过程? – JBell6 2009-02-06 15:01:08

相关问题