我正在尝试创建一个物化视图,需要在prod,dev,qa之间略有不同的过滤器。
我们有一个存储随机ID的变量表,我正试图在变量表中找到一种存储这样的东西的方法:
prod_filter_values = "(D.DEFID = 123 AND D.ATTRID IN (2, 3, 4)) OR
(D.DEFID = 3112 AND D.ATTRID IN (3, 30, 34, 23, 4)) OR
(D.DEFID = 379 AND D.ATTRID IN (3, 5, 8)) OR
(D.DEFID = 3076 AND D.ATTRID = 5);"
然后我会做select * from variables_table where EVAL(prod_filter_values)
有可能吗?
答案 0 :(得分:3)
是的,你可以像其他答案一样解释。然而,更好的方法是将这些数据驱动 - 只需在各种环境中创建具有相应幻数的表,并根据需要加入。
第二种方法是针对不同的环境设置不同的视图,其中的数字是硬编码的。
任何避免构建字符串的东西都会更好,原因如下:包括在一个地方拥有代码,稳定的代码,没有安全/注入问题,没有解析开销。
答案 1 :(得分:0)
是。查找动态SQL:
https://docs.oracle.com/cloud/latest/db112/LNPLS/dynamic.htm#LNPLS01102
类似的东西:
EXECUTE IMMEDIATE 'select * from vars_table where ' || prod_filter_values;