代码之家  ›  专栏  ›  技术社区  ›  Coding Duchess

Oracle APEX-基于页面项的动态where子句

  •  0
  • Coding Duchess  · 技术社区  · 7 年前

    是否有方法基于页项值构造动态where子句?

    可能是什么时候用的?

    SELECT a.ID, a.NAME
    FROM Table1 a
    WHERE 
        CASE WHEN mypackage.get_type_id(TO_NUMBER(:P2_TEST_TYPE))='TYPE1' OR 
               mypackage.get_type_id(TO_NUMBER(:P2_TEST_TYPE))='TYPE2' THEN
            NOT EXISTS (
              SELECT 1
              FROM   Table2 b
              WHERE  b.id = a.id            
                 AND  b.type_id = :P2_TEST_TYPE
                 AND mypackage.get_category_id(b.parent_id) <> mypackage.get_category_id(:P2_PARENT_ID)
                 AND b.status = 'NEW'
           )
      WHEN mypackage.get_type_id(TO_NUMBER(:P2_TEST_TYPE))='TYPE3' THEN
           NOT EXISTS (
              SELECT 1
              FROM   Table2 b
              WHERE  b.id = a.id            
                 AND  b.type_id = :P2_TEST_TYPE
                 AND b.status = 'NEW'
           )
     END 
    

    我怎么能做那样的事?

    0 回复  |  直到 7 年前
        1
  •  1
  •   Littlefoot    7 年前

    也许是这样的?

    而不是 CASE ,使用两者的并集 SELECT 语句,但每个语句都有自己的(附加的)条件-您要放入的条件 案例 .

    SELECT a.ID, a.NAME
    FROM Table1 a
    WHERE NOT EXISTS
      (SELECT 1
              FROM   Table2 b
              WHERE  b.id = a.id            
                 AND b.type_id = :P2_TEST_TYPE
                 AND mypackage.get_category_id(b.parent_id) <> mypackage.get_category_id(:P2_PARENT_ID)
                 AND b.status = 'NEW'
                 AND mypackage.get_type_id(TO_NUMBER(:P2_TEST_TYPE)) IN ('TYPE1', 'TYPE2')
       UNION ALL
       SELECT 1
              FROM   Table2 b
              WHERE  b.id = a.id            
                 AND b.type_id = :P2_TEST_TYPE
                 AND b.status = 'NEW'
                 AND mypackage.get_type_id(TO_NUMBER(:P2_TEST_TYPE)) = 'TYPE3'
      );            
    
    推荐文章