powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / преобразование данных из json в таблицу
20 сообщений из 20, страница 1 из 1
преобразование данных из json в таблицу
    #39352898
slana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток.
Нужен совет или да помощь в решении одной задачи. Нужно реализовать преобразование данных из вида json в таблицу. Работаю на 11 Oracle. Установила пакеты PLJSON, пыталась использовать его функции и доку читала и у меня сложилась впечатление что он служит для формирования json, а обратный процесс... как создать цикл внутри json??
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39352912
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slana,

Приведите пример входных данных, ожидаемого результата и что уже пытались/смогли сделать.
Так вам ответят быстрее.
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39352929
slana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env, спасибо за совет...

Да по сути я еще ничего не сделала, пока собираю информацию. Создала процедуру, в которую передаю свой json, кстати он еще в GLOB сидит, я его преобразовываю в тип json да и на этом все...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
 procedure lexem ( num number) as
      l_lob  CLOB;
      j_obj json;               
    begin
      
  select s_lana.json_obj.obj1 into l_lob from s_lana.json_obj where s_lana.json_obj.id_obj = num for update; 
         j_obj := json(l_lob);
                 if (j_obj.exist('FVictim.DInsurerID')) 
            then
      if(j_obj.get(''FVictim.DInsurerID'').is_array) then
       .
       . -- пока еще не придумала что дальше...
       .
           insert into s_lana.par_json (f_id, FV_DInsurerID, fc_claimdate,fv_otherpolicyseries,
      fv_otherpolicyno,fc_policyno,fc_policyseries,fv_fvehicle_regno,fc_fvehicle_regno
      ,fe_eventdate,fc_fcaseid,fc_recorddate,fc_modifydate)
      values (ae_script_log_seq.nextval, 
      json_ext.get_number(j_obj,'SearchResult.FVictim.DInsurerID'),
       s_lana.json_ext.get_date(j_obj,'SearchResult.FCase.ClaimDate'),
       s_lana.json_ext.get_string(j_obj,'SearchResult.FVictim.OtherPolicySeries'),
       s_lana.json_ext.get_number(j_obj,'SearchResult.FVictim.FVictim.OtherPolicyNo'),
       s_lana.json_ext.get_number(j_obj,'SearchResult.FCase.PolicyNo'),
       s_lana.json_ext.get_string(j_obj,'SearchResult.FCase.PolicySeries'),
       s_lana.json_ext.get_string(j_obj,'SearchResult.FVictim.FVehicle.RegNo'),
        s_lana.json_ext.get_string(j_obj,'SearchResult.FCase.FVehicle.RegNo'),
       s_lana.json_ext.get_date(j_obj,'SearchResult.FEvent.EventDate'),
       s_lana.json_ext.get_number(j_obj,'SearchResult.FCase.FCaseID'),
        s_lana.json_ext.get_date(j_obj,'SearchResult.FCase.__RecordDate'),
       s_lana.json_ext.get_date(j_obj,'SearchResult.FCase.__ModifyDate'));



Json имеет такую структуру:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
"SearchResult":
	[
		{
			"FVictim.DInsurerID":"3",
			"FCase.ClaimDate":"02.06.2016 00:00",
			"FVictim.OtherPolicySeries":"AI",
			"FVictim.OtherPolicyNo":"5795444",
			"FCase.PolicyNo":"8638408",
			"FCase.PolicySeries":"AI",
			"FVictim.FVehicle.RegNo":"AO7920AI",
			"FCase.FVehicle.RegNo":"AA6687KT",
			"FEvent.EventDate":"02.06.2016 00:00",
			"FCase.FCaseID":"1598448",
			"FCase.__RecordDate":"10.11.2016 15:23",
			"FCase.__ModifyDate":"12.11.2016 16:48"
		},
		{
			"FVictim.DInsurerID":"3",
			"FCase.ClaimDate":"01.06.2016 00:00",
			"FVictim.OtherPolicySeries":"AI",
			"FVictim.OtherPolicyNo":"8179959",
			"FCase.PolicyNo":"8816870",
			"FCase.PolicySeries":"AI",
			"FVictim.FVehicle.RegNo":"BI7116BA",
			"FCase.FVehicle.RegNo":"BB2708BO",
			"FEvent.EventDate":"01.06.2016 00:00",
			"FCase.FCaseID":"1598451",
			"FCase.__RecordDate":"10.11.2016 15:24",
			"FCase.__ModifyDate":"21.11.2016 15:32"
		},
		...
	]

}



нужно преобразовать в таблицу где параметры будут полями, а значения формировать строки.
Ребят строго не судите , для меня эта тема совсем новая...
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39352945
FridayThe13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ex8.sql
Код: plsql
1.
2.
3.
    if(obj.exist('b')) then
      if(obj.get('b').is_array) then
        temp := json_list(obj.get('b'));
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39352973
slana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FridayThe13ex8.sql
Код: plsql
1.
2.
3.
    if(obj.exist('b')) then
      if(obj.get('b').is_array) then
        temp := json_list(obj.get('b'));



Это отсюда: ex8.sql : Использование добытчиками Path JSON..
Я его начала пробывать, но засовневалась...
спасибо, сейчас буду пробывать
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39352980
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slanaРебят строго не судите , для меня эта тема совсем новая...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
SQL> CREATE TABLE json_tbl(
  2                        json_doc CLOB
  3                        CONSTRAINT ensure_json CHECK(json_doc IS JSON)
  4                       )
  5  /

Table created.

SQL> INSERT
  2    INTO json_tbl
  3    VALUES('{"SearchResult":
  4   [
  5    {
  6     "FVictim.DInsurerID":"3",
  7     "FCase.ClaimDate":"02.06.2016 00:00",
  8     "FVictim.OtherPolicySeries":"AI",
  9     "FVictim.OtherPolicyNo":"5795444",
 10     "FCase.PolicyNo":"8638408",
 11     "FCase.PolicySeries":"AI",
 12     "FVictim.FVehicle.RegNo":"AO7920AI",
 13     "FCase.FVehicle.RegNo":"AA6687KT",
 14     "FEvent.EventDate":"02.06.2016 00:00",
 15     "FCase.FCaseID":"1598448",
 16     "FCase.__RecordDate":"10.11.2016 15:23",
 17     "FCase.__ModifyDate":"12.11.2016 16:48"
 18    },
 19    {
 20     "FVictim.DInsurerID":"3",
 21     "FCase.ClaimDate":"01.06.2016 00:00",
 22     "FVictim.OtherPolicySeries":"AI",
 23     "FVictim.OtherPolicyNo":"8179959",
 24     "FCase.PolicyNo":"8816870",
 25     "FCase.PolicySeries":"AI",
 26     "FVictim.FVehicle.RegNo":"BI7116BA",
 27     "FCase.FVehicle.RegNo":"BB2708BO",
 28     "FEvent.EventDate":"01.06.2016 00:00",
 29     "FCase.FCaseID":"1598451",
 30     "FCase.__RecordDate":"10.11.2016 15:24",
 31     "FCase.__ModifyDate":"21.11.2016 15:32"
 32    }
 33          ]}')
 34  /

1 row created.

SQL> SELECT  FVictim_DInsurerID ,
  2          FCase_ClaimDate,
  3          FVictim_OtherPolicySeries,
  4          FVictim_OtherPolicyNo,
  5          FCase_PolicyNo,
  6          FCase_PolicySeries,
  7          FVictim_FVehicle_RegNo,
  8          FCase_FVehicle_RegNo,
  9          FEvent_EventDate,
 10          FCase_FCaseID,
 11          FCase__RecordDate,
 12          FCase__ModifyDate
 13    FROM  json_tbl,
 14          JSON_TABLE(
 15                     json_doc,'$'
 16                     COLUMNS
 17                       (
 18                        NESTED PATH '$.SearchResult[*]'
 19                          COLUMNS
 20                            (                           
 21                             FVictim_DInsurerID        VARCHAR2(20) PATH '$."FVictim.DInsurerID"',
 22                             FCase_ClaimDate           VARCHAR2(20) PATH '$."FCase.ClaimDate"',
 23                             FVictim_OtherPolicySeries VARCHAR2(20) PATH '$."FVictim.OtherPolicySeries"',
 24                             FVictim_OtherPolicyNo     VARCHAR2(20) PATH '$."FVictim.OtherPolicyNo"',
 25                             FCase_PolicyNo            VARCHAR2(20) PATH '$."FCase.PolicyNo"',
 26                             FCase_PolicySeries        VARCHAR2(20) PATH '$."FCase.PolicySeries"',
 27                             FVictim_FVehicle_RegNo    VARCHAR2(20) PATH '$."FVictim.FVehicle.RegNo"',
 28                             FCase_FVehicle_RegNo      VARCHAR2(20) PATH '$."FCase.FVehicle.RegNo"',
 29                             FEvent_EventDate          VARCHAR2(20) PATH '$."FEvent.EventDate"',
 30                             FCase_FCaseID             VARCHAR2(20) PATH '$."FCase.FCaseID"',
 31                             FCase__RecordDate         VARCHAR2(20) PATH '$."FCase.__RecordDate"',
 32                             FCase__ModifyDate         VARCHAR2(20) PATH '$."FCase.__ModifyDate"'
 33                            )
 34                       )
 35                    )
 36  /

FVICTIM_DINSURERID   FCASE_CLAIMDATE      FVICTIM_OTHERPOLICYS FVICTIM_OTHERPOLICYN FCASE_POLICYNO       FCASE_POLICYSERIES   FVICTIM_FVEHICLE_REG FCASE_FVEHICLE_REGNO FEVENT_EVENTDATE     FCASE_FCASEID        FCASE__RECORDDATE    FCASE__MODIFYDATE
-------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
3                    02.06.2016 00:00     AI                   5795444              8638408              AI                   AO7920AI             AA6687KT             02.06.2016 00:00     1598448              10.11.2016 15:23     12.11.2016 16:48
3                    01.06.2016 00:00     AI                   8179959              8816870              AI                   BI7116BA             BB2708BO             01.06.2016 00:00     1598451              10.11.2016 15:24     21.11.2016 15:32

SQL> 



SY.
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39352989
slana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я в ШОКЕ...... Вы использовали PLJSON?
SYslanaРебят строго не судите , для меня эта тема совсем новая...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
SQL> CREATE TABLE json_tbl(
  2                        json_doc CLOB
  3                        CONSTRAINT ensure_json CHECK(json_doc IS JSON)
  4                       )
  5  /

Table created.

SQL> INSERT
  2    INTO json_tbl
  3    VALUES('{"SearchResult":
  4   [
  5    {
  6     "FVictim.DInsurerID":"3",
  7     "FCase.ClaimDate":"02.06.2016 00:00",
  8     "FVictim.OtherPolicySeries":"AI",
  9     "FVictim.OtherPolicyNo":"5795444",
 10     "FCase.PolicyNo":"8638408",
 11     "FCase.PolicySeries":"AI",
 12     "FVictim.FVehicle.RegNo":"AO7920AI",
 13     "FCase.FVehicle.RegNo":"AA6687KT",
 14     "FEvent.EventDate":"02.06.2016 00:00",
 15     "FCase.FCaseID":"1598448",
 16     "FCase.__RecordDate":"10.11.2016 15:23",
 17     "FCase.__ModifyDate":"12.11.2016 16:48"
 18    },
 19    {
 20     "FVictim.DInsurerID":"3",
 21     "FCase.ClaimDate":"01.06.2016 00:00",
 22     "FVictim.OtherPolicySeries":"AI",
 23     "FVictim.OtherPolicyNo":"8179959",
 24     "FCase.PolicyNo":"8816870",
 25     "FCase.PolicySeries":"AI",
 26     "FVictim.FVehicle.RegNo":"BI7116BA",
 27     "FCase.FVehicle.RegNo":"BB2708BO",
 28     "FEvent.EventDate":"01.06.2016 00:00",
 29     "FCase.FCaseID":"1598451",
 30     "FCase.__RecordDate":"10.11.2016 15:24",
 31     "FCase.__ModifyDate":"21.11.2016 15:32"
 32    }
 33          ]}')
 34  /

1 row created.

SQL> SELECT  FVictim_DInsurerID ,
  2          FCase_ClaimDate,
  3          FVictim_OtherPolicySeries,
  4          FVictim_OtherPolicyNo,
  5          FCase_PolicyNo,
  6          FCase_PolicySeries,
  7          FVictim_FVehicle_RegNo,
  8          FCase_FVehicle_RegNo,
  9          FEvent_EventDate,
 10          FCase_FCaseID,
 11          FCase__RecordDate,
 12          FCase__ModifyDate
 13    FROM  json_tbl,
 14          JSON_TABLE(
 15                     json_doc,'$'
 16                     COLUMNS
 17                       (
 18                        NESTED PATH '$.SearchResult[*]'
 19                          COLUMNS
 20                            (                           
 21                             FVictim_DInsurerID        VARCHAR2(20) PATH '$."FVictim.DInsurerID"',
 22                             FCase_ClaimDate           VARCHAR2(20) PATH '$."FCase.ClaimDate"',
 23                             FVictim_OtherPolicySeries VARCHAR2(20) PATH '$."FVictim.OtherPolicySeries"',
 24                             FVictim_OtherPolicyNo     VARCHAR2(20) PATH '$."FVictim.OtherPolicyNo"',
 25                             FCase_PolicyNo            VARCHAR2(20) PATH '$."FCase.PolicyNo"',
 26                             FCase_PolicySeries        VARCHAR2(20) PATH '$."FCase.PolicySeries"',
 27                             FVictim_FVehicle_RegNo    VARCHAR2(20) PATH '$."FVictim.FVehicle.RegNo"',
 28                             FCase_FVehicle_RegNo      VARCHAR2(20) PATH '$."FCase.FVehicle.RegNo"',
 29                             FEvent_EventDate          VARCHAR2(20) PATH '$."FEvent.EventDate"',
 30                             FCase_FCaseID             VARCHAR2(20) PATH '$."FCase.FCaseID"',
 31                             FCase__RecordDate         VARCHAR2(20) PATH '$."FCase.__RecordDate"',
 32                             FCase__ModifyDate         VARCHAR2(20) PATH '$."FCase.__ModifyDate"'
 33                            )
 34                       )
 35                    )
 36  /

FVICTIM_DINSURERID   FCASE_CLAIMDATE      FVICTIM_OTHERPOLICYS FVICTIM_OTHERPOLICYN FCASE_POLICYNO       FCASE_POLICYSERIES   FVICTIM_FVEHICLE_REG FCASE_FVEHICLE_REGNO FEVENT_EVENTDATE     FCASE_FCASEID        FCASE__RECORDDATE    FCASE__MODIFYDATE
-------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
3                    02.06.2016 00:00     AI                   5795444              8638408              AI                   AO7920AI             AA6687KT             02.06.2016 00:00     1598448              10.11.2016 15:23     12.11.2016 16:48
3                    01.06.2016 00:00     AI                   8179959              8816870              AI                   BI7116BA             BB2708BO             01.06.2016 00:00     1598451              10.11.2016 15:24     21.11.2016 15:32

SQL> 



SY.
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353002
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slanaЯ в ШОКЕ...... Вы использовали PLJSON?


Упс - прочитaл по-диагонали и пропустил 11G.

SY.
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353092
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему не использовать apex_json, там конвертацию в xml, а далее уже через xmltable разбор? Не вижу смысла ставить странные пакеты.
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353099
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.2.0.4.0, PLJSON:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
set serveroutput on format wrapped
declare
    v_json     json := json('{"SearchResult":
 [
  {
   "FVictim.DInsurerID":"3",
   "FCase.ClaimDate":"02.06.2016 00:00",
   "FVictim.OtherPolicySeries":"AI",
   "FVictim.OtherPolicyNo":"5795444",
   "FCase.PolicyNo":"8638408",
   "FCase.PolicySeries":"AI",
   "FVictim.FVehicle.RegNo":"AO7920AI",
   "FCase.FVehicle.RegNo":"AA6687KT",
   "FEvent.EventDate":"02.06.2016 00:00",
   "FCase.FCaseID":"1598448",
   "FCase.__RecordDate":"10.11.2016 15:23",
   "FCase.__ModifyDate":"12.11.2016 16:48"
  },
  {
   "FVictim.DInsurerID":"3",
   "FCase.ClaimDate":"01.06.2016 00:00",
   "FVictim.OtherPolicySeries":"AI",
   "FVictim.OtherPolicyNo":"8179959",
   "FCase.PolicyNo":"8816870",
   "FCase.PolicySeries":"AI",
   "FVictim.FVehicle.RegNo":"BI7116BA",
   "FCase.FVehicle.RegNo":"BB2708BO",
   "FEvent.EventDate":"01.06.2016 00:00",
   "FCase.FCaseID":"1598451",
   "FCase.__RecordDate":"10.11.2016 15:24",
   "FCase.__ModifyDate":"21.11.2016 15:32"
  }
        ]}');
    v_array         json_list;
    v_array_element json;
    v_keys          json_list;
    begin
        v_array := json_list(v_json.get('SearchResult'));
        for v_i in 1..v_array.count loop
          v_array_element := json(v_array.get(v_i));
          v_keys          := v_array_element.get_keys;
          dbms_output.put_line(' ');
          dbms_output.put_line('RECORD' || v_i);
          dbms_output.put_line(' ');
          for v_j in 1..v_keys.count loop
            dbms_output.put_line(RPAD('  KEY = ' || v_keys.get(v_j).get_string(),34) || ' ' || 'VALUE = ' || v_array_element.get(v_j).get_string());
          end loop;
        end loop;
    end;
/

RECORD1

  KEY = FVictim.DInsurerID         VALUE = 3
  KEY = FCase.ClaimDate            VALUE = 02.06.2016 00:00
  KEY = FVictim.OtherPolicySeries  VALUE = AI
  KEY = FVictim.OtherPolicyNo      VALUE = 5795444
  KEY = FCase.PolicyNo             VALUE = 8638408
  KEY = FCase.PolicySeries         VALUE = AI
  KEY = FVictim.FVehicle.RegNo     VALUE = AO7920AI
  KEY = FCase.FVehicle.RegNo       VALUE = AA6687KT
  KEY = FEvent.EventDate           VALUE = 02.06.2016 00:00
  KEY = FCase.FCaseID              VALUE = 1598448
  KEY = FCase.__RecordDate         VALUE = 10.11.2016 15:23
  KEY = FCase.__ModifyDate         VALUE = 12.11.2016 16:48

RECORD2

  KEY = FVictim.DInsurerID         VALUE = 3
  KEY = FCase.ClaimDate            VALUE = 01.06.2016 00:00
  KEY = FVictim.OtherPolicySeries  VALUE = AI
  KEY = FVictim.OtherPolicyNo      VALUE = 8179959
  KEY = FCase.PolicyNo             VALUE = 8816870
  KEY = FCase.PolicySeries         VALUE = AI
  KEY = FVictim.FVehicle.RegNo     VALUE = BI7116BA
  KEY = FCase.FVehicle.RegNo       VALUE = BB2708BO
  KEY = FEvent.EventDate           VALUE = 01.06.2016 00:00
  KEY = FCase.FCaseID              VALUE = 1598451
  KEY = FCase.__RecordDate         VALUE = 10.11.2016 15:24
  KEY = FCase.__ModifyDate         VALUE = 21.11.2016 15:32

PL/SQL procedure successfully completed.

SQL> 



SY.
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353434
slana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shtock, Добрый день. Такой вариант тоже рассматривала, думаю к нему вернусь, если на прямую не получится... Спасибо!
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353437
slana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY, Интересно..., сейчас попробую у себя нарисовать, может сразу и в таблицу загоню. Спасибо SY!
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353594
slana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ура, заработало!!!
Отдельное спасибо SY!!!

Кидаю код, вдруг кому-нибудь пригодится!!!

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
procedure lexem(num number) as
    l_lob CLOB;
  
    f_id            number;
    FV_DI           varchar2(5);
    FC_CD           varchar(20); 
    FV_OPS          varchar2(2);
    FV_OPNo         varchar(16); 
    FC_PNo          varchar(16); --- Это переменные которым присваиваются 
    FC_PS           varchar2(2); -- значения переменных json
    FV_FVRNo        varchar(16);
    FC_FVRNo        varchar(16);
    FE_ED           varchar(16); 
    FC_FCID         varchar2(15);
    FC_RD           varchar(16); 
    FC_MD           varchar(16); 
    j_obj           json;
    v_array         json_list;
    v_array_element json;
    v_keys          json_list;
  begin
  
    select json_obj.obj1
      into l_lob          
      from json_obj
     wherejson_obj.id_obj = num
       for update;
    j_obj := json(l_lob); -- достаем из таблицы glob, где хранится json 

  
    begin -- далее обрабатываем его
      v_array := json_list(j_obj.get('SearchResult'));
      for v_i in 1 .. v_array.count loop
        v_array_element := json(v_array.get(v_i));
        v_keys          := v_array_element.get_keys;
        for v_j in 1 .. v_keys.count loop
          if v_keys.get(v_j).get_string() = ('FVictim.DInsurerID') then
            FV_DI := v_array_element.get(v_j).get_string();
          else
            if v_keys.get(v_j).get_string() = ('FCase.ClaimDate') then
              FC_CD := v_array_element.get(v_j).get_string();
            else
              if v_keys.get(v_j)
               .get_string() = ('FVictim.OtherPolicySeries') then
                FV_OPS := v_array_element.get(v_j).get_string();
              else
                if v_keys.get(v_j).get_string() = ('FVictim.OtherPolicyNo') then
                  FV_OPNo := v_array_element.get(v_j).get_string();
                else
                  if v_keys.get(v_j).get_string() = ('FCase.PolicyNo') then
                    FC_PNo := v_array_element.get(v_j).get_string();
                  else
                    if v_keys.get(v_j).get_string() = ('FCase.PolicySeries') then
                      FC_PS := v_array_element.get(v_j).get_string();
                    else
                      if v_keys.get(v_j)
                       .get_string() = ('FVictim.FVehicle.RegNo') then
                        FV_FVRNo := v_array_element.get(v_j).get_string();
                      else
                        if v_keys.get(v_j)
                         .get_string() = ('FCase.FVehicle.RegNo') then
                          FC_FVRNo := v_array_element.get(v_j).get_string();
                        else
                          if v_keys.get(v_j)
                           .get_string() = ('FEvent.EventDate') then
                            FE_ED := v_array_element.get(v_j).get_string();
                          else
                            if v_keys.get(v_j)
                             .get_string() = ('FCase.FCaseID') then
                              FC_FCID := v_array_element.get(v_j)
                                         .get_string();
                            else
                              if v_keys.get(v_j)
                               .get_string() = ('FCase.__RecordDate') then
                                FC_RD := v_array_element.get(v_j)
                                         .get_string();
                              else
                                if v_keys.get(v_j)
                                 .get_string() = ('FCase.__ModifyDate') then
                                  FC_MD := v_array_element.get(v_j)
                                           .get_string();
                                end if;
                              end if;
                            end if;
                          end if;
                        end if;
                      end if;
                    end if;
                  end if;
                end if;
              end if;
            end if;
          end if;
        
        end loop;
        insert into par_json
          (f_id,
           FV_DInsurerID,
           fc_claimdate,
           fv_otherpolicyseries,
           fv_otherpolicyno,
           fc_policyno,
           fc_policyseries,
           fv_fvehicle_regno,
           fc_fvehicle_regno,
           fe_eventdate,
           fc_fcaseid,
           fc_recorddate,
           fc_modifydate)
        values
          (ae_script_log_seq.nextval,
           FV_DI,
           FC_CD,
           FV_OPS,
           FV_OPNo,
           FC_PNo,
           FC_PS,
           FV_FVRNo,
           FC_FVRNo,
           FE_ED,
           FC_FCID,
           FC_RD,
           FC_MD);
      end loop;
    
    end;



в итоге имеем очень симпатичную табличку!!!

Всем еще раз спасибо и удачи!!!
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353623
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открой для себя ELSIF и/или CASE
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353625
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slana
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
          if v_keys.get(v_j).get_string() = ('FVictim.DInsurerID') then
            FV_DI := v_array_element.get(v_j).get_string();
          else
            if v_keys.get(v_j).get_string() = ('FCase.ClaimDate') then
              FC_CD := v_array_element.get(v_j).get_string();
            else
              if v_keys.get(v_j)
               .get_string() = ('FVictim.OtherPolicySeries') then
                FV_OPS := v_array_element.get(v_j).get_string();
              else
                if v_keys.get(v_j).get_string() = ('FVictim.OtherPolicyNo') then
                  FV_OPNo := v_array_element.get(v_j).get_string();
                else
                  if v_keys.get(v_j).get_string() = ('FCase.PolicyNo') then
                    FC_PNo := v_array_element.get(v_j).get_string();
                  else
... 
                                if v_keys.get(v_j)
                                 .get_string() = ('FCase.__ModifyDate') then
                                  FC_MD := v_array_element.get(v_j)
                                           .get_string();




Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
case v_keys.get(v_j).get_string() 
when 'FVictim.DInsurerID' then
            FV_DI := v_array_element.get(v_j).get_string();
when 'FCase.ClaimDate' then
            FC_CD := v_array_element.get(v_j).get_string();
when 'FVictim.OtherPolicySeries' then
            FV_OPS := v_array_element.get(v_j).get_string();
when 'FVictim.OtherPolicyNo' then
            FV_OPNo := v_array_element.get(v_j).get_string();
when 'FCase.PolicyNo' then
...
when 'FCase.__ModifyDate' then
            FC_MD := v_array_element.get(v_j).get_string();
end case;
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353737
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slanaУра, заработало!!!


Все это прекрасно, но ведь у тебя вcе тэги известны заранее. Я использовал get_keys только для того что на dbms_output писанины меньше.
Ты-бы почитала на сон грядущий методы типов json, json_list, json_value, etc. глядишь и наткнулась на метод json.get.
Тогда и не писала бы монстроидальные IFы . Лови:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
SQL> create table par_json(
  2                        FV_DInsurerID varchar2(20),
  3                        fc_claimdate varchar2(20),
  4                        fv_otherpolicyseries varchar2(20),
  5                        fv_otherpolicyno varchar2(20),
  6                        fc_policyno varchar2(20),
  7                        fc_policyseries varchar2(20),
  8                        fv_fvehicle_regno varchar2(20),
  9                        fc_fvehicle_regno varchar2(20),
 10                        fe_eventdate varchar2(20),
 11                        fc_fcaseid varchar2(20),
 12                        fc_recorddate varchar2(20),
 13                        fc_modifydate varchar2(20)
 14                       )
 15  /

Table created.

declare
    v_json     json := json('{"SearchResult":
 [
  {
   "FVictim.DInsurerID":"3",
   "FCase.ClaimDate":"02.06.2016 00:00",
   "FVictim.OtherPolicySeries":"AI",
   "FVictim.OtherPolicyNo":"5795444",
   "FCase.PolicyNo":"8638408",
   "FCase.PolicySeries":"AI",
   "FVictim.FVehicle.RegNo":"AO7920AI",
   "FCase.FVehicle.RegNo":"AA6687KT",
   "FEvent.EventDate":"02.06.2016 00:00",
   "FCase.FCaseID":"1598448",
   "FCase.__RecordDate":"10.11.2016 15:23",
   "FCase.__ModifyDate":"12.11.2016 16:48"
  },
  {
   "FVictim.DInsurerID":"3",
   "FCase.ClaimDate":"01.06.2016 00:00",
   "FVictim.OtherPolicySeries":"AI",
   "FVictim.OtherPolicyNo":"8179959",
   "FCase.PolicyNo":"8816870",
   "FCase.PolicySeries":"AI",
   "FVictim.FVehicle.RegNo":"BI7116BA",
   "FCase.FVehicle.RegNo":"BB2708BO",
   "FEvent.EventDate":"01.06.2016 00:00",
   "FCase.FCaseID":"1598451",
   "FCase.__RecordDate":"10.11.2016 15:24",
   "FCase.__ModifyDate":"21.11.2016 15:32"
  }
        ]}');
    v_array         json_list;
    v_array_element json;
    begin
        v_array := json_list(v_json.get('SearchResult'));
        for v_i in 1..v_array.count loop
          v_array_element := json(v_array.get(v_i));
          insert
            into par_json(
                          fv_dinsurerid,
                          fc_claimdate,
                          fv_otherpolicyseries,
                          fv_otherpolicyno,
                          fc_policyno,
                          fc_policyseries,
                          fv_fvehicle_regno,
                          fc_fvehicle_regno,
                          fe_eventdate,
                          fc_fcaseid,
                          fc_recorddate,
                          fc_modifydate
                         )
            values(
                   v_array_element.get('FVictim.DInsurerID').get_string(),
                   v_array_element.get('FCase.ClaimDate').get_string(),
                   v_array_element.get('FVictim.OtherPolicySeries').get_string(),
                   v_array_element.get('FVictim.OtherPolicyNo').get_string(),
                   v_array_element.get('FCase.PolicyNo').get_string(),
                   v_array_element.get('FCase.PolicySeries').get_string(),
                   v_array_element.get('FVictim.FVehicle.RegNo').get_string(),
                   v_array_element.get('FCase.FVehicle.RegNo').get_string(),
                   v_array_element.get('FEvent.EventDate').get_string(),
                   v_array_element.get('FCase.FCaseID').get_string(),
                   v_array_element.get('FCase.__RecordDate').get_string(),
                   v_array_element.get('FCase.__ModifyDate').get_string()
                  );
        end loop;
    end;
/

PL/SQL procedure successfully completed.

SQL> select  *
  2    from  par_json
  3  /

FV_DINSURERID        FC_CLAIMDATE         FV_OTHERPOLICYSERIES FV_OTHERPOLICYNO     FC_POLICYNO          FC_POLICYSERIES      FV_FVEHICLE_REGNO    FC_FVEHICLE_REGNO    FE_EVENTDATE         FC_FCASEID           FC_RECORDDATE        FC_MODIFYDATE
-------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -----------------
3                    02.06.2016 00:00     AI                   5795444              8638408              AI                   AO7920AI             AA6687KT             02.06.2016 00:00     1598448              10.11.2016 15:23     12.11.2016 16:48
3                    01.06.2016 00:00     AI                   8179959              8816870              AI                   BI7116BA             BB2708BO             01.06.2016 00:00     1598451              10.11.2016 15:24     21.11.2016 15:32

SQL> 



SY.
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353773
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще. Твое решение (как и мое с insert) предполагает каждый элемент json array всегда содержитvalue pairs с тэгами:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   "FVictim.DInsurerID"
   "FCase.ClaimDate"
   "FVictim.OtherPolicySeries"
   "FVictim.OtherPolicyNo"
   "FCase.PolicyNo"
   "FCase.PolicySeries"
   "FVictim.FVehicle.RegNo"
   "FCase.FVehicle.RegNo"
   "FEvent.EventDate"
   "FCase.FCaseID"
   "FCase.__RecordDate",
   "FCase.__ModifyDate"



Если это не так, то исользуй метод json.exist.

SY.
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353796
slana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,
Мне еще не с одной функцией нужно разобраться... буду модифицировать... Я догадываюсь что там много лишнего налеплено, но для меня это уже маленькая победа...
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353802
slana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY, Да, этот json будет всегда содержать одинаковые поля. Я так понимаю что можно написать универсальную процедуру, которая будет обрабатывать любой json?
...
Рейтинг: 0 / 0
преобразование данных из json в таблицу
    #39353819
slana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да как все оказывается просто... Честно чувствую себя полным user-ом...:( Спасибо.
SY
Все это прекрасно, но ведь у тебя вcе тэги известны заранее. Я использовал get_keys только для того что на dbms_output писанины меньше.
Ты-бы почитала на сон грядущий методы типов json, json_list, json_value, etc. глядишь и наткнулась на метод json.get.
Тогда и не писала бы монстроидальные IFы . Лови:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
SQL> create table par_json(
  2                        FV_DInsurerID varchar2(20),
  3                        fc_claimdate varchar2(20),
  4                        fv_otherpolicyseries varchar2(20),
  5                        fv_otherpolicyno varchar2(20),
  6                        fc_policyno varchar2(20),
  7                        fc_policyseries varchar2(20),
  8                        fv_fvehicle_regno varchar2(20),
  9                        fc_fvehicle_regno varchar2(20),
 10                        fe_eventdate varchar2(20),
 11                        fc_fcaseid varchar2(20),
 12                        fc_recorddate varchar2(20),
 13                        fc_modifydate varchar2(20)
 14                       )
 15  /

Table created.

declare
    v_json     json := json('{"SearchResult":
 [
  {
   "FVictim.DInsurerID":"3",
   "FCase.ClaimDate":"02.06.2016 00:00",
   "FVictim.OtherPolicySeries":"AI",
   "FVictim.OtherPolicyNo":"5795444",
   "FCase.PolicyNo":"8638408",
   "FCase.PolicySeries":"AI",
   "FVictim.FVehicle.RegNo":"AO7920AI",
   "FCase.FVehicle.RegNo":"AA6687KT",
   "FEvent.EventDate":"02.06.2016 00:00",
   "FCase.FCaseID":"1598448",
   "FCase.__RecordDate":"10.11.2016 15:23",
   "FCase.__ModifyDate":"12.11.2016 16:48"
  },
  {
   "FVictim.DInsurerID":"3",
   "FCase.ClaimDate":"01.06.2016 00:00",
   "FVictim.OtherPolicySeries":"AI",
   "FVictim.OtherPolicyNo":"8179959",
   "FCase.PolicyNo":"8816870",
   "FCase.PolicySeries":"AI",
   "FVictim.FVehicle.RegNo":"BI7116BA",
   "FCase.FVehicle.RegNo":"BB2708BO",
   "FEvent.EventDate":"01.06.2016 00:00",
   "FCase.FCaseID":"1598451",
   "FCase.__RecordDate":"10.11.2016 15:24",
   "FCase.__ModifyDate":"21.11.2016 15:32"
  }
        ]}');
    v_array         json_list;
    v_array_element json;
    begin
        v_array := json_list(v_json.get('SearchResult'));
        for v_i in 1..v_array.count loop
          v_array_element := json(v_array.get(v_i));
          insert
            into par_json(
                          fv_dinsurerid,
                          fc_claimdate,
                          fv_otherpolicyseries,
                          fv_otherpolicyno,
                          fc_policyno,
                          fc_policyseries,
                          fv_fvehicle_regno,
                          fc_fvehicle_regno,
                          fe_eventdate,
                          fc_fcaseid,
                          fc_recorddate,
                          fc_modifydate
                         )
            values(
                   v_array_element.get('FVictim.DInsurerID').get_string(),
                   v_array_element.get('FCase.ClaimDate').get_string(),
                   v_array_element.get('FVictim.OtherPolicySeries').get_string(),
                   v_array_element.get('FVictim.OtherPolicyNo').get_string(),
                   v_array_element.get('FCase.PolicyNo').get_string(),
                   v_array_element.get('FCase.PolicySeries').get_string(),
                   v_array_element.get('FVictim.FVehicle.RegNo').get_string(),
                   v_array_element.get('FCase.FVehicle.RegNo').get_string(),
                   v_array_element.get('FEvent.EventDate').get_string(),
                   v_array_element.get('FCase.FCaseID').get_string(),
                   v_array_element.get('FCase.__RecordDate').get_string(),
                   v_array_element.get('FCase.__ModifyDate').get_string()
                  );
        end loop;
    end;
/

PL/SQL procedure successfully completed.

SQL> select  *
  2    from  par_json
  3  /

FV_DINSURERID        FC_CLAIMDATE         FV_OTHERPOLICYSERIES FV_OTHERPOLICYNO     FC_POLICYNO          FC_POLICYSERIES      FV_FVEHICLE_REGNO    FC_FVEHICLE_REGNO    FE_EVENTDATE         FC_FCASEID           FC_RECORDDATE        FC_MODIFYDATE
-------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -----------------
3                    02.06.2016 00:00     AI                   5795444              8638408              AI                   AO7920AI             AA6687KT             02.06.2016 00:00     1598448              10.11.2016 15:23     12.11.2016 16:48
3                    01.06.2016 00:00     AI                   8179959              8816870              AI                   BI7116BA             BB2708BO             01.06.2016 00:00     1598451              10.11.2016 15:24     21.11.2016 15:32

SQL> 



SY.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / преобразование данных из json в таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]