我可以将字符串解析为SQL代码

时间:2018-02-22 23:02:40

标签: sql oracle plsql

我正在尝试创建一个物化视图,需要在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)

之类的事情

有可能吗?

2 个答案:

答案 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;