问题描述
我们有几个巨大的 sql 语句(在嵌入式 sqlrpgle 程序中执行),我们为它们创建了单独的视图 - 每个 sql 一个。
sql 语句在程序中有条件地执行。也就是说,程序中有一些条件逻辑(用 RPG 编写),它们将决定我们是执行一个查询还是另一个查询。
那是以某种方式在视图代码中包含条件逻辑。
下面是我能想象到的最简单的视图伪代码
if (condition 1 is true)
Select * from table1;
else
Select * from table2;
if 条件逻辑需要成为我尝试创建的视图的一部分。在 DB2 中可能有这样的事情吗?
请注意,上面使用的条件 1 是非常高级的表示。逻辑实际上是由几个程序调用等组成的。
任何建议将不胜感激。
解决方法
如果这两个部分返回相同数量的列,并且它们的类型兼容,那么您可以像这样编写视图。
CREATE VIEW V AS
WITH C(C) AS ( VALUES (condition) )
SELECT * FROM table1,C WHERE C = 1
UNION ALL
SELECT * FROM table2,C WHERE C = 0
或者考虑使用 table function