Функция wm_concat и небольшой буфер characer - PullRequest
1 голос
/ 29 апреля 2010

Я выбрал как:

select substr(account,1,4), currency, amount, module,count(*) quan, wm_concat(id) ids from all_transactions group by substr(account,1,4), currency, amount, module

Но иногда COUNT (*) превышает 600. В этом случае я получаю: 'ORA-06502: PL / SQL:: слишком маленький буфер символьных строк'

Есть ли способ сохранить wm_concat (id) для всех записей? Потому что исключение этой функции для записей с большим COUNT (*) является выходом.

1 Ответ

3 голосов
/ 30 апреля 2010

Проблема может заключаться в том, что WM_CONCAT () пытается сгенерировать строку, превышающую ограничение на стороне базы данных в VARCHAR2, которое, я считаю, составляет 2000 символов. В коде PL / SQL ограничение велико - 32767, если я правильно помню. Возможно, вам придется разбить это на несколько запросов. Сначала сделайте суммирование

strAccount  VARCHAR2(4);
strCurrency all_transactions.currency%type;
nAmount     all_transactions.amount%type;
strModule   all_transactions.module%type;
nQuantity   NUMBER;

select substr(account,1,4), currency, amount, module, count(*) quan
  into strAccount, strCurrency, nAmount, strModule, nQuantity
  from all_transactions
  group by substr(account,1,4), currency, amount, module 

, затем наведите курсор, чтобы получить имена по отдельности и объединить их вместе на любом языке приложения, который вы используете. Если ваш код написан на PL / SQL, он может выглядеть так:

strNames  VARCHAR2(32767);

FOR aRow in (select id
               from all_transactions
               where substr(account, 1, 4) = strAccount and
                     currency = strCurrency and
                     amount = nAmount and
                     module = strModule
               order by id)
LOOP
  strNames := strNames || aRow.id || ' ';
END LOOP

Конечно, это не самое элегантное решение в мире, но, учитывая, что WM_CONCAT здесь не практичен, вы можете застрять, делая что-то подобное.

Делись и наслаждайся.

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