Перенести полную таблицу в столбец json / clob в другой таблице - PullRequest
0 голосов
/ 17 февраля 2020

Я хочу перенести данные из следующих table1 :

NAME | Surname
-----+---------
Name1| Surname1
Name2| Surname2

Into table2 в виде сгустка (nclob, nvarchar (max), json .. et c.) column:

NAME | JSON_COLUMN
-----+-------------------------------
NAME1| {Name: Name1,Surname: Surname1}
NAME2| {Name: Name2,Surname: Surname2}

Интересно, как лучше всего выполнить этот тип миграции?

Есть ли функция, которая может преобразовать таблицу в формат json, чтобы я мог вставить ее в новую таблицу?

Примерно так:

insert into table2 (JSON_TABLE) select (table1 as json) from table1

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

В Oracle 12 c и выше Вам нужно будет преобразовать значения столбца, используя JSON_OBJECT, а затем в CLOB и для правильного JSON используйте FORMAT JSON (SQL строковые значения 'true' и 'false' преобразуются в JSON Boolean значения true и false.)

Пример:

SQL> WITH TABLE1 AS (
  2      SELECT 'Name1' NAME, 'Surname1' SURNAME FROM DUAL
  3      UNION ALL
  4      SELECT 'Name2', 'Surname2' FROM DUAL
  5  )
  6  SELECT
  7      NAME,
  8      TO_CLOB(JSON_OBJECT ( 'Name' VALUE NAME,
  9                    'Surname' VALUE SURNAME
 10                    FORMAT JSON )) AS "JSON_TABLE"
 11  FROM
 12      TABLE1;

NAME      |JSON_TABLE
----------|--------------------------------------------------
Name1     |{"Name":"Name1","Surname":Surname1}
Name2     |{"Name":"Name2","Surname":Surname2}

SQL>

Для Oracle 11g и ниже вам нужно создать JSON самостоятельно следующим образом:

SQL> WITH TABLE1 AS (
  2      SELECT 'Name1' NAME, 'Surname1' SURNAME FROM DUAL
  3      UNION ALL
  4      SELECT 'Name2', 'Surname2' FROM DUAL
  5  )
  6  SELECT
  7      NAME,
  8      to_clob('{"Name:"' || NAME || '","Surname":'||SURNAME || '}') as "JSON_TABLE"
  9  FROM
 10      TABLE1;

NAME      |JSON_TABLE
----------|--------------------------------------------------
Name1     |{"Name:"Name1","Surname":Surname1}
Name2     |{"Name:"Name2","Surname":Surname2}

SQL>

Другой вариант в Oracle 11g - использовать sql* плюс интерфейс командной строки следующим образом:

set sqlformat json

, а затем SELECT * FROM TABLE1 сгенерирует результат в формате json, но вам нужно экспортировать его в некоторый файл, используя spool, а затем загрузить его в TABLE2. (Может быть, длинный подход)

Ура !!

1 голос
/ 17 февраля 2020

В oracle вы можете использовать json_object():

select 
    name,
    json_object('Name' value name, 'Surname' value surname) js
from mytable

Демонстрация на DB Fiddle :

with mytable as (
    select 'Name1' name, 'Surname1' surname from dual
    union all select 'Name2', 'Surname2' from dual
)
select 
    name,
    json_object('Name' value name, 'Surname' value surname) js
from mytable
NAME  | JS                                   
:---- | :------------------------------------
Name1 | {"Name":"Name1","Surname":"Surname1"}
Name2 | {"Name":"Name2","Surname":"Surname2"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...