2017-02-07 1 views
0

У меня есть запрос оракула, который использует созданную таблицу как часть кода. Каждый раз, когда мне нужно запускать отчет, я удаляю текущие данные и импортирую новые данные, которые я получаю. Это один столбец идентификатора. Мне нужно создать отчет о SSRS, в котором пользователь может вводить эти данные в указанную таблицу в качестве параметра. Я разработал простой отчет о том, что они могут ввести некоторые из идентификаторов в параметр, но могут быть случаи, когда им нужно ввести несколько тысяч идентификаторов, а отчет уже длится долго. Вот что говорит в настоящее время код SSRS:Могу ли я настроить отчет SSRS, где пользователи вводят параметры в таблицу

select distinct n.id, n.notes 
from notes n 
join (
    select max(seq_num) as seqnum, id from notes group by id) maxresults 
on n.id = maxresults.ID 
where n.seq_num = maxresults.seqnum 
and n.id in (@MyParam) 

Есть ли способ, чтобы иметь данные MyParam вставки в таблицу я бы присоединиться под названием my_id, вступив в регистрации my_id идентификатора на n.id = id.id

У меня нет прав на создание функций или процедур в базе данных.

Спасибо

+0

Единственный способ получить SSRS писать обратно, чтобы получить его, чтобы назвать храните процедуру как источник, и в этой хранимой процедуре вставьте данные. Вы не можете запустить инструкцию insert из SSRS. –

+0

Если я вызываю хранимую процедуру из отчета, может ли пользователь ввести данные в поле параметров, которое будет вставлять его в таблицу? –

+0

Да. Вы определяете параметр в отчете и передаете этот параметр в хранимую процедуру, и он может делать то, что ему нравится (включая вставку в таблицу). Я работал в SQL Server. Мой коллега сделал это в Oracle. Только сложная вещь будет передавать огромный список идентификаторов. Это не очень удобно для этих целей. –

ответ

0

Вы можете попробовать трюк с MATERIALIZE намек, который обычно заставляет Oracle создать временную таблицу:

WITH cte1 AS 
(SELECT /*+ MATERIALIZE */ 1 as id FROM DUAL 
    UNION ALL 
    SELECT 2 DUAL 
) 
SELECT a.* 
FROM table1 a 
INNER JOIN cte1 b ON b.id = a.id 
+0

a1ex07, как бы я заполнил это представление из пользовательского ввода при запуске отчета? –

+0

Одним из способов является преобразование списка, разделенного запятыми (код, взятый из http://www.orafaq.com/forum/t/184666/): 'с тестом как выберите '421907802490,421907672085,421911460415,421905464170,421907802292' col от двойного) выберите regexp_substr (col, '[^,] +', 1, level) результат из теста connect by level <= length (regexp_replace (col, '[^,] +')) + 1; ' – a1ex07

+0

Фактически данные находятся в столбце в электронной таблице Excel, и пользователь должен будет преобразовать его в csv. перед тем как войти в отчет. Я получил отчет для работы только копирования из Excel, но только несколько идентификаторов одновременно и работает очень долго. Поскольку у них есть потребность в несколько тысяч раз, мне нужно лучшее решение. –

Смежные вопросы