Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle APEX-基于页面项的动态where子句_Sql_Oracle_Plsql_Oracle Apex - Fatal编程技术网

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

Sql Oracle APEX-基于页面项的动态where子句,sql,oracle,plsql,oracle-apex,Sql,Oracle,Plsql,Oracle Apex,是否有一种基于页面项值构造动态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 (

是否有一种基于页面项值构造动态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 

我怎么能做那样的事呢?

也许是这样吧

不要使用CASE,而是使用两个SELECT语句的并集,但它们每个都有自己的附加条件,即您要放入CASE中的条件


你能帮我回答另一个问题吗?
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'
  );