Многозначный параметр не работает в SSRS 2017 для Oracle источника данных - PullRequest
0 голосов
/ 06 января 2020

Я создаю SSRS report с oracle источником данных. Я передаю многозначные значения параметров в качестве фильтра Oracle dataset. Ниже приведен пример запроса:

select *from FIN.FINANCIAL_TRANSACTION F
 where TO_DATE(F.CREATE_DATETIME) BETWEEN  to_date(:startdate,'YYYY-MM-DD') and  to_date(:enddate,'YYYY-MM-DD')
AND F.SUBTYPE IN (:subtype)

Этот запрос работает, когда я передаю одно значение в параметре: subtype. Когда я передал несколько значений, я не получаю вывод. Если в параметре указано несколько значений, он передается в виде строки, разделенной запятыми. Поэтому я попытался разделить строку с помощью запроса ниже. Но получаю ошибку при обработке отчета.

выберите * из FIN.FINANCIAL_TRANSACTION F, где TO_DATE (F.CREATE_DATETIME) BETWEEN to_date (: startdate, 'YYYY-MM-DD') и to_date (: enddate, 'YYYY-MM-DD' ) И F.SUBTYPE IN (выберите regexp_substr (замените (: подтип, '' '', '"'), '[^,] +', 1, level) как txt
из двойного соединения BY regexp_substr (замените ( : подтип, '' '', '"'), '[^,] +', 1, уровень) не равен нулю)

1 Ответ

1 голос
/ 06 января 2020

Проблема в вашем запросе REPLACE(:SUBTYPE, '''', '"'). Почему вы заменяете одинарную кавычку на двойную?

Значения в Oracle всегда заключаются в одинарные кавычки, например:

F.SUBTYPE IN ('val1','val2','val3',.....)  

Так что я думаю, что это единственная проблема в вашем запросе.

Для нескольких входные параметры, разделенные запятыми, вы можете использовать Hierarchical query следующим образом (повторяя ваш запрос, чтобы предоставить вам фактический запрос):

SELECT
    *
FROM
    FIN.FINANCIAL_TRANSACTION F
WHERE
    TO_DATE(F.CREATE_DATETIME) BETWEEN TO_DATE(:STARTDATE, 'YYYY-MM-DD') 
      AND TO_DATE(:ENDDATE, 'YYYY-MM-DD')
    -- changes after this line (IN clause)
    AND F.SUBTYPE IN (
        SELECT DISTINCT
            TRIM(REGEXP_SUBSTR(:SUBTYPE, '[^,]+', 1, LEVEL)) VALUE
        FROM
            DUAL
        CONNECT BY
            REGEXP_SUBSTR(:SUBTYPE, '[^,]+', 1, LEVEL) IS NOT NULL
    );

Это будет поддерживать как одно, так и несколько значений (через запятую) .

Ура !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...