【发布时间】:2019-10-22 23:00:32
【问题描述】:
以下代码创建了一个过滤器,我成功地将它附加到现有的 sql 语句中。
DECLARE V_FILTER VARCHAR2(255);
begin
SELECT DISTINCT 'reserve reporting_unit_code' ||' IN (' ||
listagg ( chr(39) || uic || chr(39) , ',') within group (order by uic) || ')'
into v_FILTER
from ( select distinct uicf.uic
FROM OWSADHOC.ADHOC_UIC_FILTER UICF
INNER JOIN OWSADHOC.ADHOC_USER_ROLE UROLE
ON UICF.ROLE_NAME = UROLE.ROLE_NAME
inner join OWSADHOC.ADHOC_USER_DATA uname
on uname.USER_ID = UROLE.USER_ID
WHERE UROLE.ROLE_NAME in (:P_LoggedInUserRoles)
and uname.JASPER_ACCOUNT = :P_LoggedInUserName
)
;
DBMS_OUTPUT.PUT_LINE ('GENERATED FILTER: ' || V_FILTER);
end;
v_FILTER 是reserve reporting_unit_code IN ('86749')
当P_LoggedInUserRoles 只有一个值时,这可以正常工作。但是,如果我在变量中有一个逗号分隔的列表,它就不起作用。我尝试将 expressionList 定义为一个数组。 PL/SQL 不使用该方法进行编译。
如果一个有多个值,expressionList 是否仅限于使用文字值?我在任何手册中都找不到该显式语句,但我无法将 expressionList 定义为作为值集合的变量。
【问题讨论】: