我陷入困境,需要你的帮助。
我有一个存储过程,其中包含一些select语句,其中包含一些连接和许多条件foreach产品设置。结构如下所示。
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:或者T2.COL2 =' V2'或T3.COL3 =' V3'
设置2:或者T2.COL4 =' V4'或T3.COL5 =' V5'
每次有新产品进入时,我们都需要添加一个新的where条件及其各自的设置。
现在,对于新要求,我们需要使用任何配置表自动执行此过程。
有人可以在下面建议吗
@。表结构
@。修改选择查询,以便我们不需要修改现有条件
@。我们还需要注意现有逻辑不会破坏
非常感谢提前!!
答案 0 :(得分:1)
使用列product_config
创建表product, type, col1, col2
。 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 :(得分:0)
使用这个查询查询,比如你有名字,类型&价:
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'
执行动态查询