sql - 将全表迁移到另一个表中的 json/clob 列
问题描述
我想从以下table1迁移数据:
NAME | Surname
-----+---------
Name1| Surname1
Name2| Surname2
进入table2 作为 clob (nclob,nvarchar(max),json.. etc.) 列:
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
解决方案
在 Oracle 12c 及更高版本中,您需要将列值使用JSON_OBJECT
and转换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*plus 命令行界面,如下所示:
set sqlformat json
然后SELECT * FROM TABLE1
将生成 json 格式的结果,但您需要使用将其导出到某个文件spool
,然后将其加载到TABLE2
. (可能是冗长的方法)
干杯!!
推荐阅读
- python - 加载具有字符串格式的文件
- ios - 如何防止两个堆叠的 UIView 的阴影加倍并变厚?[迅速]
- laravel - 无法在 Plesk 中使用 Laravel 发送电子邮件
- sorting - 得到一个错误,即使我是一个数字,我也无法将 nil 与数字进行比较
- linux - 尝试使用用户输入、环境变量、文件系统操作、条件、下载、取消归档来编写脚本
- http - Dart:未处理的异常:类型'String'不是'index'类型'int'的子类型
- rest - 使用 Genexus 的 Rest Service 问题(url 编码)
- reactjs - 与 Firestore 的实时反应聊天,我如何订阅数据?
- ruby-on-rails - 如何在没有用户会话的情况下连接 websocket?
- python - 自动更改谷歌搜索页面