лучший способ перебрать записи в PL SQL - PullRequest
0 голосов
/ 10 октября 2019

Я готовлю скрипт миграции, чтобы изменить некоторые объекты из таблицы. Может случиться так, что мне придется изменить более чем одну вещь на одном объекте. Поэтому возвращаемые результаты выглядят так:

obj1 val1,
obj1 val2,
obj2 valX,
obj3 valY,
...
objN valN

Чтобы изменить объект, мне нужно сделать цикл, который откроет сеанс во внешней системе и изменит объект. Я хотел бы сэкономить некоторое время / память и открыть один ордер для obj1 и добавить оба значения val 1 и val2 в течение одного сеанса.

Одна из идей, которые у меня были, заключалась в том, чтобы подготовить некоторую «промежуточную» временную таблицу, в которой ядобавил бы записи в следующем формате

obj1 val1 val2;
obj2 valX;
obj3 valY;
...
objN valN ...

Но из-за прав доступа внешней системы к БД Oracle я не смог бы это сделать. Поэтому я подумал, смогу ли я агрегировать значения для ввода в цикл, избегая генерации временных таблиц.

Могу ли я попросить предложения, чтобы решить это "хорошим" способом?

1 Ответ

1 голос
/ 10 октября 2019

LISTAGG объединяет значения одной и той же группы во время группировки.

Что-то вроде этого поможет вам:

SELECT OBJ_COL_NAME,
       LISTAGG(VAL_COL_NAME, ' ') WITHIN GROUP (ORDER BY VAL_COL_NAME) || ';' AS VALS
  FROM YOUR_TABLE
GROUP BY OBJ_COL_NAME;

для получения более подробной информации о LISTAGG, пожалуйста, обратитесь кэтот документ

Ура !!

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