Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Длина запроса в Oracle  [new]
oson
Member

Откуда: Одесса, Украина
Сообщений: 1129
Подскажите пожалуйста, какое ограничение длины запроса в Oracle?
Например запрос типа "SELECT * FROM Person p WHERE p.id in (1,2,3,4,...,999999999999)"
Если этих Person сотни миллионов, то запрос не выполнится?
4 фев 13, 15:18    [13872910]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Lord British
Member

Откуда: На Камчатке красиво?
Сообщений: 758
oson,

< p.id and p.id <

или



insert into temp
select level as id from dual connect by level < 10000...000

select ...
from Person
join
temp on p.id = ...temp.id
LOL
4 фев 13, 15:22    [13872934]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
oson,

да даже он не дойдет до выполнение....
4 фев 13, 15:23    [13872940]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Be or not to be
Guest
Здесь сыграет свое дело ограничение на количество значений в in(...)
4 фев 13, 15:23    [13872944]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Lord British
Member

Откуда: На Камчатке красиво?
Сообщений: 758
oson,

можно и так заменить

select * from where id != 0;

,

delete from person where id = 0;
4 фев 13, 15:30    [13872972]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Lord British
Member

Откуда: На Камчатке красиво?
Сообщений: 758
Be or not to be
Здесь сыграет свое дело ограничение на количество значений в in(...)


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

ps. а в общем случае то хранить запрос можно кусками байт по int.MaxValue байт. И индексировать block_number,offset
4 фев 13, 15:34    [13873002]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
Lord British
конечно, там есть ограничение, иначе этой херью можно было бы сервер положить, параллельно засыпая его огромными текстами.

ps. а в общем случае то хранить запрос можно кусками байт по int.MaxValue байт. И индексировать block_number,offset

???
4 фев 13, 15:43    [13873095]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
Lord British,
пойди охолонись слегка.. желательно в море))


oson
либо замени на SELECT * FROM Person p WHERE (p.id,1) in ((1,1),(2,1),(3,1),(4,1),...,(999999999999,1))
либо используй коллекции, временные таблицы, поиск по форуму тоже хорошо помогает.
4 фев 13, 15:45    [13873117]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Lord British
Member

Откуда: На Камчатке красиво?
Сообщений: 758
ten,

отчего у вас вылезли глаза, вы не знаете, как программист, например на том же c/c++/c#, asm etc, что память можно выделить не одним куском, а выделять блоками по мере надобности и в этих блоках хранить текст кусками в этих блоках? а при парсинге текста индексировать парой n_block, block_offset?

так что, если разработчики oracle и ограничили размер запроса размер запроса, то скорее из соображений безопасности и здравого смысла, чем из-за ограничение максимального значения int.
4 фев 13, 15:50    [13873159]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Lord British
Member

Откуда: На Камчатке красиво?
Сообщений: 758
Vint,

помоему это вам стоит окунуться вон пример вверху с темпом и прочим.
4 фев 13, 15:52    [13873171]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5369
Size Limitations on PLSQL Packages [ID 62603.1]
References:
PL/SQL Size Limits Explained [ID 99882.1]

?
4 фев 13, 16:10    [13873299]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5369
+ Ask Tom: program too large error (PLS-00123)
4 фев 13, 16:15    [13873341]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
васькин гроббинс
Guest
oson
Подскажите пожалуйста, какое ограничение длины запроса в Oracle?
Например запрос типа "SELECT * FROM Person p WHERE p.id in (1,2,3,4,...,999999999999)"
Если этих Person сотни миллионов, то запрос не выполнится?
1000 элементов ограничение
4 фев 13, 16:17    [13873368]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
oson,

имхо, вам стОит радикально изменить направление мысли.
не надо напрягать сервер глупостями. если хотите конкретных примеров - объясните,
откуда и в каком виде возникает у вас тот набор значений, который вы (совершенно зря) пытаетесь в запрос засунуть.
4 фев 13, 16:24    [13873438]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
Lord British
отчего у вас вылезли глаза, вы не знаете, как программист, например на том же c/c++/c#, asm etc, что память можно выделить не одним куском, а выделять блоками по мере надобности и в этих блоках хранить текст кусками в этих блоках? а при парсинге текста индексировать парой n_block, block_offset?

Сударь, здесь как-то не принято верить на слово. Пример реализации в студию, плиз.
4 фев 13, 16:25    [13873440]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
Be or not to be
Здесь сыграет свое дело ограничение на количество значений в in(...)


Это в общем-то искуственное ограничение которое легко обходится с помощью tuples.

SY.
4 фев 13, 16:38    [13873532]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Lord British
Member

Откуда: На Камчатке красиво?
Сообщений: 758
ten
Lord British
отчего у вас вылезли глаза, вы не знаете, как программист, например на том же c/c++/c#, asm etc, что память можно выделить не одним куском, а выделять блоками по мере надобности и в этих блоках хранить текст кусками в этих блоках? а при парсинге текста индексировать парой n_block, block_offset?

Сударь, здесь как-то не принято верить на слово. Пример реализации в студию, плиз.


ten, так толсто, что даже тонко

+ c#, гавнакодец создает строку длиной > размера индекса строки и делает обход этой строки

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication8
{
    class Program
    {
        static void Main(string[] args)
        {
            // Количество ссылок на блоки. Здесь 2 ссылки
            char[][] str = new char[3][];

            // Каждый блок почти 2 Gb, так как char - 2 байт
            for (int i = 0; i < str.Length; i++)
            {
                str[i] = new char[1024 * 1024 * 1000];

                Console.WriteLine("Размер блока \t{0}", str[i].Length);
            }

            Console.WriteLine("Размер int \t{0} (размер индекса массива)", int.MaxValue);
            Console.WriteLine("Длина строки \t{0} * {1}", str.Length, str[0].Length);

            // ...

            // Парсим строку
            Parse(str);
        }

        static void Parse(char[][] str)
        {
            // Перебираем блоки
            for (int i = 0; i < str.Length; i++)
            {
                char[] strBlock = str[i];

                // Работаем с блоком как с обычным линейным массивом
                for (int j = 0; j < strBlock.Length; j++)
                {
                    // Делаем какую-то работу
                }
            }
        }
    }
}





Размер блока 1048576000
Размер блока 1048576000
Размер блока 1048576000
Размер int 2147483647 (размер индекса массива)
Длина строки 3 * 1048576000
4 фев 13, 17:01    [13873725]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
oson
Member

Откуда: Одесса, Украина
Сообщений: 1129
Vint
Lord British,
либо замени на SELECT * FROM Person p WHERE (p.id,1) in ((1,1),(2,1),(3,1),(4,1),...,(999999999999,1))



Тут 1 - просто заглушка?
4 фев 13, 17:38    [13873983]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
oson,
да. посмотрите ссылку SY.
но это не самый лучший метод. сформулируйте требование, почему требуется миллион элементов в in
4 фев 13, 17:52    [13874097]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
oson
Vint
Lord British,
либо замени на SELECT * FROM Person p WHERE (p.id,1) in ((1,1),(2,1),(3,1),(4,1),...,(999999999999,1))



Тут 1 - просто заглушка?

не суйте пльцы в эту розетку. не надо..
тот самый случай, когда лучше бы ограничение там было..
4 фев 13, 17:55    [13874112]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Expression Lists :
A comma-delimited list of expressions can contain no more than 1000 expressions. A comma-delimited list of sets of expressions can contain any number of sets, but each set can contain no more than 1000 expressions.
4 фев 13, 17:58    [13874122]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
orawish,
я недавно динамику переписал которая по 1к через or собирала)) пусть сунет. 1 раз и на всю жизть)
4 фев 13, 17:58    [13874128]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
oson
Member

Откуда: Одесса, Украина
Сообщений: 1129
orawish
oson,

имхо, вам стОит радикально изменить направление мысли.
не надо напрягать сервер глупостями. если хотите конкретных примеров - объясните,
откуда и в каком виде возникает у вас тот набор значений, который вы (совершенно зря) пытаетесь в запрос засунуть.


Это запрос вообще из Java JPA.

select p from Person p where p.id in (1,2,3...)


Этих Person может быть миллион.
Куда тут менять направление мысли?
4 фев 13, 20:20    [13874524]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
oson,

биндить коллекции
4 фев 13, 20:30    [13874546]     Ответить | Цитировать Сообщить модератору
 Re: Длина запроса в Oracle  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
oson
orawish
oson,

имхо, вам стОит радикально изменить направление мысли.
не надо напрягать сервер глупостями. если хотите конкретных примеров - объясните,
откуда и в каком виде возникает у вас тот набор значений, который вы (совершенно зря) пытаетесь в запрос засунуть.


Это запрос вообще из Java JPA.

select p from Person p where p.id in (1,2,3...)


Этих Person может быть миллион.
Куда тут менять направление мысли?

а в джаве откуда? из базы выбирается или из файла приплывает или несчастный узер миллион чекокнопочек накликивает?
ниразу не верится, будто джава их рожает
а направление - в зависимости от таки ситуации (которую вы, очевидно, храните в страшной тайне ) - в сторону использования:
джоинов, gtt, коллекций, утилит загрузки, биндинга массивов
4 фев 13, 20:37    [13874557]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить