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

Откуда: Прилуки
Сообщений: 29
Уверена, что такое можно сделать, но не соображу как:
Есть исходная табличка:
НоменклатураСчёт учёта
130020100691
130020100723
130020100791
130020100991
130020101023
130020101091
130020101323
130020101723
130020101791
130020101792
130020102091
130020102094

Необходимо сгруппировать записи следующим образом:
НоменклатураСчёт учёта
130020100691
130020100723/91
130020100991
130020101023/91
130020101323
130020101723/91/92
130020102091/94

Надоумьте как реализовать это в PL/SQL?

Заранее благодарю!
13 фев 18, 14:52    [21188021]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Elic
Member [заблокирован]

Откуда: 1984. Выбраковка финно-угром началась. КЯЗ
Сообщений: 27889
mbm
в PL/SQL?
RTFM LISTAGG (FAQ)
13 фев 18, 14:57    [21188038]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
982183
Member

Откуда:
Сообщений: 1805
21171743
13 фев 18, 14:59    [21188051]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 6246
Студентам, желающим помощи

Покажите что Вы пытались сделать, начните с тестовых данных:
with t(ID,ACCOUNT) as ( 
select 1300201006,91 from dual union all
select 1300201007,23 from dual union all
select 1300201007,91 from dual union all
select 1300201009,91 from dual union all
select 1300201010,23 from dual union all
select 1300201010,91 from dual union all
select 1300201013,23 from dual union all
select 1300201017,23 from dual union all
select 1300201017,91 from dual union all
select 1300201017,92 from dual union all
select 1300201020,91 from dual union all
select 1300201020,94 from dual
) 
select  id,account from t;
13 фев 18, 14:59    [21188053]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
mbm
Member

Откуда: Прилуки
Сообщений: 29
Elic
RTFM LISTAGG (FAQ)

Спасибо, это кажется то, что нужно, но...

Функцию LISTAGG можно использовать в следующих версиях Oracle / PLSQL: Oracle 12c, Oracle 11g Release 2

А есть какой-то аналог под Oracle8i?
13 фев 18, 15:22    [21188154]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
mefman
Member

Откуда:
Сообщений: 2037
mbm
Elic
RTFM LISTAGG (FAQ)

Спасибо, это кажется то, что нужно, но...

Функцию LISTAGG можно использовать в следующих версиях Oracle / PLSQL: Oracle 12c, Oracle 11g Release 2

А есть какой-то аналог под Oracle8i?

Можно запросить у оракла, для старых версий они выдают по запросу.
13 фев 18, 15:26    [21188176]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Elic
Member [заблокирован]

Откуда: 1984. Выбраковка финно-угром началась. КЯЗ
Сообщений: 27889
mbm
Oracle8i?
Сочувствую.
RTFM ТОП №14
13 фев 18, 15:27    [21188182]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1018
Vadim Lejnin
Покажите что Вы пытались сделать, начните с тестовых данных:



SQL> ed
Wrote file afiedt.buf

  1  declare
  2   v_s varchar2(4000);
  3   v_id number;
  4  begin
  5  for r in (
  6  with t(ID,ACCOUNT) as (
  7  select 1300201006,91 from dual union all
  8  select 1300201007,23 from dual union all
  9  select 1300201007,91 from dual union all
 10  select 1300201009,91 from dual union all
 11  select 1300201010,23 from dual union all
 12  select 1300201010,91 from dual union all
 13  select 1300201013,23 from dual union all
 14  select 1300201017,23 from dual union all
 15  select 1300201017,91 from dual union all
 16  select 1300201017,92 from dual union all
 17  select 1300201020,91 from dual union all
 18  select 1300201020,94 from dual
 19  )
 20  select  id,account from t order by id) loop
 21   if v_id=r.id then
 22     v_s:=v_s||'/'||r.ACCOUNT;
 23   else
 24     if v_id is not null then
 25       dbms_output.put_line(v_id||' '||v_s);
 26     end if;
 27     v_s:=r.ACCOUNT;
 28     v_id:=r.id;
 29   end if;
 30  end loop;
 31  if v_id is not null then
 32     dbms_output.put_line(v_id||' '||v_s);
 33  end if;
 34* end;
SQL> /
1300201006 91
1300201007 23/91
1300201009 91
1300201010 23/91
1300201013 23
1300201017 23/91/92
1300201020 91/94

PL/SQL procedure successfully completed.

SQL>


....
stax
13 фев 18, 15:45    [21188263]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 8903
mbm
А есть какой-то аналог под Oracle8i?


ROW_NUMBER + hierarchical query + снять толстый слой пыли с моего пакета 302640.

SY.
13 фев 18, 16:46    [21188585]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
mbm
Member

Откуда: Прилуки
Сообщений: 29
to Stax

СПАСИБО!

Мне не хватало "толчка"!
Переделала: записи выбираются из одной таблицы (TMP_DEBET_AMORT) и агрегируются в другую (TMP_DEBET_AMORT_GR):
declare
v_acc   varchar2(100);
v_nomen  number;
begin
  delete from TMP_DEBET_AMORT_GR;
  for r in (select nomen_code,amort_debet from TMP_DEBET_AMORT group by nomen_code,amort_debet order by nomen_code)
    loop
      if v_nomen=r.nomen_code
        then v_acc:=v_acc||'/'||r.amort_debet;
      else
        if v_nomen is not null
          then insert into TMP_DEBET_AMORT_GR (nomen_code,amort_debet) values (v_nomen,v_acc);
        end if;
      v_acc:=r.amort_debet;
      v_nomen:=r.nomen_code;
      end if;
    end loop;
 if v_nomen is not null
   then insert into TMP_DEBET_AMORT_GR (nomen_code,amort_debet) values (v_nomen,v_acc);
 end if;
 commit;
end;
13 фев 18, 17:33    [21188759]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
SAS2014
Member

Откуда: Сталинград
Сообщений: 2442
mbm
Elic
RTFM LISTAGG (FAQ)

Спасибо, это кажется то, что нужно, но...

Функцию LISTAGG можно использовать в следующих версиях Oracle / PLSQL: Oracle 12c, Oracle 11g Release 2

А есть какой-то аналог под Oracle8i?


а что еще 8 юзается кем то, прикольно
14 фев 18, 01:46    [21189526]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Jebrail
Member

Откуда: Тбилиси
Сообщений: 308
wm_concat же.
14 фев 18, 23:55    [21192567]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Добрый Э - Эх
Guest
Jebrail
wm_concat же.
и ты даже можешь продемонстрировать его использование на версии 8i?
а ничего, что она появилась сильно позже (даже не в девятке, если что) и так и осталась недокументированной?
15 фев 18, 05:33    [21192661]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5777
Добрый Э - Эх
даже не в девятке, если что

А вот тут пруф, пожалуйста. Т.к. я её в 9.2 использовал точно.

Документировали её с 10-ки, насколько я помню.
15 фев 18, 09:12    [21192811]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Добрый Э - Эх
Guest
env,

не раньше, чем Jebrail покажет, что её можно использовать в 9i
15 фев 18, 09:21    [21192827]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Добрый Э - Эх
Guest
env
насколько я помню.
"есть только двое, (памяти) которых я доверяю. один из них - это я, а второй - не ты"(с) ;)

Сам-то доказать можешь, что твое "точно" было в версии 9i, а не в 10g, например?
15 фев 18, 09:33    [21192851]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Elic
Member [заблокирован]

Откуда: 1984. Выбраковка финно-угром началась. КЯЗ
Сообщений: 27889
env
А вот тут пруф, пожалуйста. Т.к. я её в 9.2 использовал точно.
SQL> select object_type, count(*) from all_objects where owner = 'WMSYS' group by object_type;

OBJECT_TYPE          COUNT(*)
------------------ ----------
INDEX                      33
PROCEDURE                   1
SEQUENCE                    9
TABLE                      23
TYPE                        5
VIEW                       58

6 rows selected.

SQL> disc
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production
15 фев 18, 09:34    [21192854]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5777
Добрый Э - Эх,

А есть какой-нибудь аналог live sql для 8i, 9i и т.д.?
15 фев 18, 09:43    [21192882]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5777
Добрый Э - Эх
Сам-то доказать можешь, что твое "точно" было в версии 9i, а не в 10g, например?


Я с 9.2.0.4 на 11g перескакивал. С 10-й сильно позже пришлось столкнуться.
15 фев 18, 09:45    [21192887]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
WM_CONCAT
Guest
Jebrail
wm_concat же.

10-ки не осталось :(
Connected to Oracle8i Enterprise Edition Release 8.1.7.3.0
select wm_concat(dummy) from dual
ORA-00904: invalid column name

Connected to Oracle9i Enterprise Edition Release 9.2.0.8.0 
select wm_concat(dummy) from dual
ORA-00904: "WM_CONCAT": invalid identifier

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 
select wm_concat(dummy) from dual
WM_CONCAT(DUMMY)
--------------------------------------------------------------------------------
X

Connected to Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 
select wm_concat(dummy) from dual
ORA-00904: "WM_CONCAT": invalid identifier

То есть
а) В 8-ке WM_CONCAT не было
б) Вообще, советовать использовать недокументированную функцию, которая была только в двух майор версиях, при этом еще и изменялась (результат с varchar2 на clob) - не очень хорошо
15 фев 18, 11:30    [21193273]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5777
WM_CONCAT,

Спасибо. Значит либо память подводит, либо один добрый человек "допилил" 9.2.0.4 функционалом из 10-ки для своих нужд.

Виталий, wm_concat в 10g входит в бинарники или накатывается из скриптов схемы wmsys?
15 фев 18, 12:26    [21193470]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1018
env
WM_CONCAT,

Спасибо. Значит либо память подводит, либо один добрый человек "допилил" 9.2.0.4 функционалом из 10-ки для своих нужд.


SQL>  CREATE OR REPLACE
type       WM_CONCAT_IMPL wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
d
270 160
bg9hz+fBwa888VEZGViHFs/oOP0wg433f64df3QCWE7VehmhTFcUe3y+JrsniV3cSuvmnE3g
Y93dtR+cCsU1N+UQDGbtzhCf2HIdr8lPzfgF2bmCTvmGlHQbTAjTftNrDq3p093ncwb32OyX
3ZFDTeH2jpjm3uWYyT8kZBfJIYxRwgLfRApoW32cpy0eRnvDBt2XfTAMXKCSNnqSoTiGA83W
6deKW+rWyBu9L/EPyFkmQZeBncNsiNDF8fa1Sm6vdQiEanlCQnaPJ11a0na8hK6psDSaey+x
fdMupCwSvg6gMrSV4QCguhOCqW2AmxRVMqpXJootPpTBxBFZc7hORGbriUI=
/ 
Type created.
 
SQL>  CREATE OR REPLACE function wm_concat wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
58 96
+CuW1MAfZPVR6NOnXKVmXY2o9pswg8eZgcfLCNL+XhZy8K7/cgzcVrPnfMPnx3TAM7h0ZSXD
j57Asr2ym9ZtFldFmFu+RdpAU8VGORKSvtVG+DmAOR4C+NTa+Pit2kDbEpI5zhZUgqameSkE
DQ==
/ 
Function created.
 
SQL>  select wm_concat(object_id) from sys.user_objects
/ 
WM_CONCAT(OBJECT_ID)                                                            
--------------------------------------------------------------------------------
108674,108672,53144,53147,53150,53151,53162                                     
1 row selected.


.....
stax
15 фев 18, 13:18    [21193678]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17565
Тока не говори что ты в 9-ку запихал пакет с форматом WRAP от 10-ки
15 фев 18, 13:21    [21193691]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1018
Вячеслав Любомудров,

наоборот с 10 --> выше

ps
разврапливать тож не пробовал

.....
stax
15 фев 18, 13:58    [21193840]     Ответить | Цитировать Сообщить модератору
 Re: Сцепить содержимое  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17565
Тогда объясни что ты хотел продемонстрировать в предыдущем посте
15 фев 18, 14:02    [21193865]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить