Oracle 在BI Publisher 12c中创建动态SQL Where子句

Oracle 在BI Publisher 12c中创建动态SQL Where子句,oracle,dynamic,xml-publisher,Oracle,Dynamic,Xml Publisher,如何根据用户的选择在BI Publisher 12c中动态修改SQL 我需要应用多个BIP参数。现在,若用户在参数中传递了一些内容,那个么应用它是有意义的,但若用户让“All”值通过一个提示符,那个么SQL就会非常慢 下面是一个如何在数据模型中使用参数的示例- SELECT DEPTNO FROM DEPT WHERE 1=1 AND IN DEPTNO IN (: p_deptno) 现在,当用户选择“全部”查看所有数据时,我需要删除(:p_DEPTNO)部分中的和DEPTNO(必须删除)。

如何根据用户的选择在BI Publisher 12c中动态修改SQL

我需要应用多个BIP参数。现在,若用户在参数中传递了一些内容,那个么应用它是有意义的,但若用户让“All”值通过一个提示符,那个么SQL就会非常慢

下面是一个如何在数据模型中使用参数的示例-

SELECT DEPTNO FROM DEPT WHERE 1=1 AND IN DEPTNO IN (: p_deptno)
现在,当用户选择“全部”查看所有数据时,我需要删除(:p_DEPTNO)部分中的
和DEPTNO(必须删除)。想象一下,我有很多过滤器,我需要删除所有未选中的过滤器

我在这里看到了一些关于旧BIP的帮助,但对于新的12版本没有任何帮助(根据下面的链接:)


我将Oracle用于我的数据库。

创建动态SQL需要一些技巧和多个步骤。其主要思想是根据输入动态生成sql。如果用户选择任何参数,则只有“WHERE”处于活动状态,否则它将处于非活动状态

当您有复杂的SQL和大型表,并且希望避免在('All')
类默认子句中使用
时,这会有效地执行。这是一个三步过程,如下所述

仅适用于Oracle DB

步骤A.创造爱-

  • 海螺-

    SELECT ''''||ABCD||'''' FROM (
         SELECT LISTAGG(  COLUMN_VALUE,''',''') WITHIN GROUP (ORDER BY 1) as ABCD
    FROM TABLE(sys.ODCIVARCHAR2LIST(:prmTerritory)))
    
  • 中断-

    Select ' AND 1=1' from dual where :prmTerritoryConcat=''''''  OR   :prmTerritoryConcat = '''All'''
    union all 
    select '  AND  orig_table.Territory IN ('||  :prmTerritoryConcat ||')'  from dual where :prmTerritoryConcat  <>  '''''' AND  :prmTerritoryConcat <> '''All'''
    
  • 测试用例——我考虑了下面的两个用例。检查正在创建的sql BIP的输出日志。对于这两种情况,日志都应显示为这样- 案例1-未选择区域时-

    SELECT Territory 
    from original_table original_table 
    WHERE 
    1=1
    
    SELECT Territory 
    from original_table original_table 
    WHERE 1=1 
    AND orig_table.Territory IN ('Americas', 'EMEA', 'APAC')
    
    案例2-选择领土时-

    SELECT Territory 
    from original_table original_table 
    WHERE 
    1=1
    
    SELECT Territory 
    from original_table original_table 
    WHERE 1=1 
    AND orig_table.Territory IN ('Americas', 'EMEA', 'APAC')
    

    请阅读-总结是,这不是一个理想的方式来解决志愿者,可能会适得其反获得答案。请不要把这个添加到你的问题中。我找到了一个方法。我们正在使用词汇参数。这个过程有点复杂,但使生活更容易。如果有人想知道,请与我联系。欢迎(并鼓励)您在下面填写答案,因此,如果您以后不再登录该平台,读者仍然可以从您学到的知识中受益。我添加了适合我们的解决方案。。。