Выполнение подзапроса со списком идентификаторов с использованием Dapper 1.50 и Oracle 18 - PullRequest
0 голосов
/ 16 марта 2020

Все, я отправляю список идентификаторов (более 1000 разрешенных Oracle макс.) В предложении sql where с использованием Dapper 1.50 и Oracle 18. Поскольку существует ограничение на количество Элементы в предложении in, я решил сделать подзапрос, как показано ниже, но я не могу заставить его работать. Может кто-то пролить свет на это. Я всегда буду отправлять более 1000 предметов в качестве идентификаторов. Второй оператор sql не работает (он говорит, что недействителен sql).

public static List<Notes> GetNotes()
        {


            List<Notes> notes = new List<Notes>();
            try
            {               
                using (var connection = OracleConnectionString)
                {
                    connection.Open();
                    string idCommand = @"select * from (select
    id
from
    note_text
order by
    1
desc)where
    rownum <=2000";

                    var notesList = connection.Query<Notes>(idCommand);
                    var noteIds1 = notesList .Select(i => i.id).ToList();                   


                    string command = @"select
                                               tnt.id as id,
                                               tnt.NOTE_TXT
                                                          from
                                                             note_text tnt
                                                             (
                                                                select
                                                                    note_id
                                                                 from
                                                                      dual
                                                                where
                                                                    note_id in :noteIds1
                                                              )x where x.note_id = tnt.id";

                    var info = connection.Query<Notes>(command, new
                    {
                        noteIds1

                    });
                    notes = info.ToList();

                }

            }
            catch (Exception ex)
            {

            }
            return notes;
        }

1 Ответ

0 голосов
/ 16 марта 2020

Откуда происходит этот список идентификаторов? Я бы поместил их в файл, к которому можно получить доступ как к внешней таблице. Тогда вместо

select ...
from ...
where id in (<listthatstoolong)

вы бы

select ...
from ...
where id in (select id from id_external_table)

Тогда вы не ограничены размером строки элементов в вашем списке IN.

...