параметр в запросе sql: SSRS - PullRequest
1 голос
/ 13 февраля 2009

Я использую oracleclient провайдера. Мне было интересно, как использовать параметр в запросе.

select * from table A where A.a in ( parameter).

Параметр должен быть multivalue.

как мне создать набор данных?

Ответы [ 6 ]

1 голос
/ 17 января 2013

Во-первых, в SSRS с подключением Oracle OLEDB необходимо использовать двоеточие, а не символ @, например. : параметр не @параметр, но тогда вы не сможете сделать это как многозначный параметр, он принимает только отдельные значения. Хуже того, если вы используете соединение ODBC, вы должны использовать вопросительный знак сам по себе, например, ? не @parameter, и тогда порядок параметров становится важным, и они также не могут быть многозначными. Единственный способ, которым у вас остались, - использовать выражение для построения запроса (функция join () для параметра) или вызвать сохраненный процесс.

Опция сохраненной процедуры лучше всего подходит, потому что SSRS может очень аккуратно обрабатывать параметры для хранимых процедур как для SQL Server, так и для Oracle, но если это не вариант, вы можете использовать это выражение:

="select column1, column2, a from table A where A.a in (" + Join(Parameters!parameter.Value,", ") + ")"

Или, если значения параметров являются строками, для которых требуется апостроф:

="select column1, column2, a from table A where A.a in ('" + Join(Parameters!parameter.Value,"', '") + "')"

Когда вы щелкаете правой кнопкой мыши по набору данных, вы можете выбрать «свойства набора данных» и затем использовать кнопку fx, чтобы редактировать запрос как выражение, а не использовать конструктор запросов, который не позволит вам редактировать его как выражение. ,

Этот метод выражения ограничен максимальным пределом около 1000 значений, но если у вас их так много, это неправильный способ сделать это в любом случае, вы бы предпочли присоединиться к таблице.

1 голос
/ 13 февраля 2009

Вы не можете иметь переменную в списке в Oracle напрямую. Однако вы можете разбить разделенный запятыми список на строки, которые можно использовать в вашем подзапросе. Строка txt может быть заменена любым количеством значений, разделенных запятой.

   select * from a where a.a in ( 
       SELECT regexp_substr(txt,'[^,]+',1,level)
         FROM (SELECT 'hello,world,hi,there' txt  -- replace with parameter
                 FROM DUAL)
   CONNECT BY LEVEL <= LENGTH (REGEXP_REPLACE (txt, '[^,]'))+1
   )

Запрос работает, сначала посчитав количество запятых в текстовой строке. Это делается с помощью регулярного выражения для удаления всех запятых, а затем подсчитывается длина остатка.

Затем он использует «хитрость» Oracle, чтобы вернуть это число + 1 число строк из двойной таблицы. Затем он использует функцию regexp_substr для извлечения каждого события.

1 голос
/ 13 февраля 2009

Simple. Добавьте параметр в отчет и убедитесь, что он отмечен как многозначный. Затем на вкладке данных и перейдите к редактированию запроса, нажмите кнопку «...», чтобы отредактировать набор данных. На вкладке параметров создайте параметр отображения, чтобы он выглядел примерно так (очевидно, у вас будут разные имена для ваших параметров):

@ids | =Parameters!ContractorIDS.Value

Затем на вкладке запроса используйте взаимосвязанный подзапрос, как в примере выше. Я делал это много раз с сервером SQL, и нет никаких причин, по которым он не должен работать с Oracle, поскольку SSRS собирается создать SQL-оператор, совместимый с ANSI, который он передаст Oracle.

where A.myfield in (@ids)
0 голосов
/ 12 декабря 2017

Как упоминал Виктор Гримальдо ... ниже работал для меня очень хорошо. Как только я использую :parameter в своем запросе SQL в наборе данных SSRS1 .. он попросил меня ввести значения для этих параметров, для которых я выбираю уже созданные параметры SSRS.

SELECT * FROM table a WHERE VALUE IN (**:parametername**)

Спасибо, Виктор.

0 голосов
/ 09 января 2014

Параметры в oracle определены как ": имя_параметра", поэтому в вашем запросе вы должны использовать что-то вроде:

select * from table A where value in (:parametername)

Добавьте параметр в папки параметров в отчете и установите флажок «Разрешить несколько значений».

0 голосов
/ 13 февраля 2009

Я не думаю, что вы можете использовать параметр в такой ситуации. (Если только оракул и используемый вами язык не поддерживают параметры типа массива?)

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