От новичка до гуру: Курсы программирования на CyberDuff

Разделитель для набора результатов из базы данных oracle в весеннем пакете

Мне нужно извлечь результаты из запроса в плоский файл. Есть ли способ разделить набор результатов, чтобы к нему можно было получить доступ несколькими потоками.

Я пробовал разбиение на основе ROWNUM без сортировки, но когда один и тот же запрос выполняется несколькими потоками, ROWNUM не остается одинаковым (поскольку я не сортирую из-за влияния на производительность) и создает дубликаты на выходе.


  • Rownum должен быть одинаковым до тех пор, пока ваш запрос не будет выполнен несколько раз, улучшите код, в котором выполняется запрос sql, и поместите счетчик, сколько раз он выполняется на каждом шаге. 18.06.2015

Ответы:


1

Используйте ORA_HASH для разделения строк на детерминированные сегменты:

select *
from
(
    select level, ora_hash(level, 2) bucket
    from dual
    connect by level <= 10
)
where bucket = 2;


LEVEL   BUCKET
-----   ------
    1        2
    3        2
    6        2
   10        2

Это число, начинающееся с 0. Используйте bucket = 0 и bucket = 1, чтобы получить остальные 2 набора.

19.06.2015

2

Вместо этого используйте ROWID. ROWID неизменен для каждой записи. Или просто используйте первичный ключ (или любое другое поле с достаточным количеством различных значений для этого материала), чтобы разделить данные на подмножества.

select * 
from table    
where SUBSTR(ROWIDTOCHAR(ROWID),-1) IN ('A','a','0');

select * 
from table       
where SUBSTR(ROWIDTOCHAR(ROWID),-1) IN ('B','b','1');

or 

select * 
from table       
where SUBSTR(ROWIDTOCHAR(ROWID),-1) between 'A' and 'Z';
etc.

Вам придется немного поэкспериментировать с предложением where. Насколько я знаю, последний символ rownum может содержать [A-Z][a-z][0-9] + и /

18.06.2015
Новые материалы

Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

Отслеживание состояния с течением времени с дифференцированием снимков
Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

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

Игра в прятки с данными
Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

«Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

Все о кейсах: Camel, Snake, Kebab & Pascal
В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..