[英]Stored Procedure - Exclude where conditions in a separate table
我陷入困境,需要您的帮助。
我有一个带select语句的存储过程,该语句具有一些联接,并且在许多情况下每个产品设置的条件。 结构如下所示。
SELECT *
FROM TABLE1 T1
INNER JOIN T2 ON T1.ID = T2.ID
INNER JOIN T3 ON T1.ID = T3.ID
WHERE T1.STATUS = 'UnResolved'
AND
(
T1.COL1 NOT IN ('X', 'Y', 'Z')
AND (T1.Product != 'TEST1' OR T2.COL2 = 'V2' OR T3.COL3 = 'V3')
AND (T1.Product != 'TEST2' OR T2.COL2 = 'V2' OR T3.COL3 = 'V3')
AND (T1.Product != 'TEST3' OR T2.COL4 = 'V4' OR T3.COL5 = 'V5')
AND (T1.Product != 'TEST4' OR T2.COL4 = 'V4' OR T3.COL5 = 'V5')
)
任何产品只有两个固定的可能设置。
设置1:OR T2.COL2 ='V2'OR T3.COL3 ='V3'
设置2:OR T2.COL4 ='V4'OR T3.COL5 ='V5'
每次有新产品出现时,我们都需要使用相应的设置添加一个新的where条件。
现在,对于新要求,我们需要使用任何配置表来自动化此过程。
有人可以建议下面的事情吗
@。 表的结构
@。 修改选择查询,这样我们就不需要修改现有条件
@。 我们还需要注意,现有逻辑不会中断
提前谢谢了!!
使用product, type, col1, col2
列product, type, col1, col2
创建表product_config
。 product
应该是T1.product
外键。
为每个产品在其中创建一行。 type
指定使用col2, col3
或col4, col5
。
product type
TEST1 1
TEST2 1
TEST3 2
TEST4 2
然后查询将如下所示:
SELECT *
FROM TABLE1 T1
INNER JOIN PRODUCT_CONFIG C ON (T1.PRODUCT = C.PRODUCT)
INNER JOIN T2 ON T1.ID = T2.ID
INNER JOIN T3 ON T1.ID = T3.ID
WHERE T1.STATUS = 'UnResolved'
AND
(
T1.COL1 NOT IN ('X', 'Y', 'Z')
AND (C.TYPE != 1 OR T2.COL2 = 'V2' OR T3.COL3 = 'V3')
AND (C.TYPE != 2 OR T2.COL4 = 'V4' OR T3.COL5 = 'V5')
)
我之前使用的1个解决方案是创建一个具有您的输入参数和使用条件的查找表。 例如,您可以使用以下各列创建一个表:
使用此查询查询,说出您的姓名,类型和价格:
SELECT WHERE_CLAUSE FROM PRODUCT_CRITERIA WHERE PRODUCT_NAME = :PRODUCT_NAME AND PRODUCT_TYPE = :PRODUCT_TYPE AND PRODUCT_PRICE = :PRODUCT_PRICE
在Oracle中,可以使用WHERE_CLAUSE使用'EXECUTE IMMEDIATE'执行动态查询
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.