簡體   English   中英

如何從oracle SQL或plsql中的表列中獲取where子句條件

[英]How to take where clause conditions from table column in oracle SQL or plsql

如何從 oracle plsql 中的表列中獲取 where 子句條件。

例如表中的數據 Condition 1.sourceSystemId = 'SN' 2.AND(coverageType='AD',amountType1='PREMIUM',premiumFrequency='REGULAR',yearOfPremium='1')

例如查詢:select * from xyz where rule='abc' and "sourceSystemId = 'SN'"

select * from xyz where rule='abc' AND(coverageType='AD',amountType1='PREMIUM',premiumFrequency='REGULAR',yearOfPremium='1')

不完全確定你在這里問什么,但我想

select * from xyz where rule='abc' AND(coverageType='AD',amountType1='PREMIUM',premiumFrequency='REGULAR',yearOfPremium='1')

會成為

select * from xyz 
where rule='abc' 
AND coverageType='AD' 
and amountType1='PREMIUM' 
and premiumFrequency='REGULAR' 
and yearOfPremium='1'

我想你想要類似的東西:

DECLARE 
  l_query  VARCHAR2(2000) := 'select * from xyz where rule=''abc''';
  l_result xyz%ROWTYPE;
  l_cursor SYS_REFCURSOR;
BEGIN 
  dbms_output.put_line(l_query);
  FOR clause IN (SELECT condition
                   FROM conditions)
  LOOP
    l_query := l_query||' AND '||clause.condition;
  END LOOP;
  
  OPEN l_cursor FOR l_query;
    LOOP
      FETCH l_cursor INTO l_result;
      EXIT WHEN l_cursor%NOTFOUND;
        ..
      -- your processing
    END LOOP;
  CLOSE l_cursor;
END;

這是 SQL 解決方案的示例。 我使用了第一個和最后一個條件,但你可以得到它們......

WITH
    xyz As
        (
            Select 1 "ID", 'abc' "RULE", 'AD' "COVERAGETYPE", 'PREMIUM' "AMOUNTTYPE1", 'REGULAR' "PREMIUMFREQUENCY", '1' "YEAROFPREMIUM" From Dual
          UNION
            Select 2 "ID", 'abc' "RULE", 'BF' "COVERAGETYPE", 'ORDINARY' "AMOUNTTYPE1", 'EXTRA' "PREMIUMFREQUENCY", '2' "YEAROFPREMIUM" From Dual
          UNION
            Select 3 "ID", 'abc' "RULE", 'AD' "COVERAGETYPE", 'PREMIUM' "AMOUNTTYPE1", 'REGULAR' "PREMIUMFREQUENCY", '1' "YEAROFPREMIUM" From Dual
        ),
    conditions As
        (
            SELECT UPPER('coverageType=AD,amountType1=PREMIUM,premiumFrequency=REGULAR,yearOfPremium=1') "CND" From Dual
        )
SELECT
    x.ID, x.RULE, x.COVERAGETYPE, x.AMOUNTTYPE1, x.PREMIUMFREQUENCY, x.YEAROFPREMIUM
FROM
    xyz x 
INNER JOIN
    conditions c ON(1=1)
WHERE
    x.RULE = 'abc' And
    x.COVERAGETYPE =  CASE WHEN InStr(c.CND || ',', 'COVERAGETYPE=') = 0 THEN x.COVERAGETYPE
                      ELSE SubStr(SubStr(c.CND || ',', InStr(c.CND || ',', 'COVERAGETYPE=') + Length('COVERAGETYPE=')), 1, InStr(SubStr(c.CND || ',', InStr(c.CND || ',', 'COVERAGETYPE=') + Length('COVERAGETYPE=') + 1), ',')) END And
    x.YEAROFPREMIUM = CASE WHEN InStr(c.CND || ',', 'YEAROFPREMIUM=') = 0 THEN x.YEAROFPREMIUM
                      ELSE SubStr(SubStr(c.CND || ',', InStr(c.CND || ',', 'YEAROFPREMIUM=') + Length('YEAROFPREMIUM=')), 1, InStr(SubStr(c.CND || ',', InStr(c.CND || ',', 'YEAROFPREMIUM=') + Length('YEAROFPREMIUM=') + 1), ',')) END

結果:

    ID RULE COVERAGETYPE AMOUNTTYPE1 PREMIUMFREQUENCY YEAROFPREMIUM
     1 abc  AD           PREMIUM     REGULAR          1            
     3 abc  AD           PREMIUM     REGULAR          1                       

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM