Oracle 在BI Publisher 12c中创建动态SQL Where子句
如何根据用户的选择在BI Publisher 12c中动态修改SQL 我需要应用多个BIP参数。现在,若用户在参数中传递了一些内容,那个么应用它是有意义的,但若用户让“All”值通过一个提示符,那个么SQL就会非常慢 下面是一个如何在数据模型中使用参数的示例-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(必须删除)。
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')
请阅读-总结是,这不是一个理想的方式来解决志愿者,可能会适得其反获得答案。请不要把这个添加到你的问题中。我找到了一个方法。我们正在使用词汇参数。这个过程有点复杂,但使生活更容易。如果有人想知道,请与我联系。欢迎(并鼓励)您在下面填写答案,因此,如果您以后不再登录该平台,读者仍然可以从您学到的知识中受益。我添加了适合我们的解决方案。。。