oracle怎么取json格式的数据字符段?

-一个大坑 2017-11-06 09:47:04
调用functions方法返回值就是下面的类型(只会返回一条),我要取出里面的邮箱

{"emplid":"A2001","Name":"张三","sip":"566669@qq.com","ename":"ZHANGSAN"}
{"emplid":"A2002","Name":"李四","sip":"66688899@qq.com","ename":"LISI"}
{"emplid":null,"Name":null,"sip":null,"ename":null} --查不到数据
...全文
2928 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinanxinjierkej 2020-05-22
  • 打赏
  • 举报
回复
引用 2 楼 卖水果的net 的回复:
哪个版本的库?12c 可以直接处理json数据。 11g 及以下版本,就要麻烦一些,可以用正则,也可以使用 instr 和 substr 这两个函数了。
你好,请问一下oracle通过什么接口去处理json的数据呢?比如说有个公司A开发个应用,有JSON接口。我想通过Oracle把里面的数据放进我的数据库里,怎么实现?跪谢!!
-一个大坑 2017-11-06
  • 打赏
  • 举报
回复
引用 10 楼 qq646748739 的回复:
不要写这么长进去啊,直接从表里面读取字段。 给你一个测试脚本:

--1.创建测试表
with tmp as
(
select '{"emplid":"A2001","Name":"张三","sip":"566669@qq.com","ename":"ZHANGSAN"}' str from dual union all
select '{"emplid":"A2002","Name":"李四","sip":"66688899@qq.com","ename":"LISI"}' str from dual union all
select '{"emplid":null,"Name":null,"sip":"null","ename":null}' str from dual 
)
--2.sql实现
select str, substr(str,instr(str,',',1,2)+8,instr(str,',',1,3)-instr(str,',',1,2)-9) from tmp
恩,可以了。 帮我看下这个帖子的。我在procedure用时有错误 http://bbs.csdn.net/topics/392283350
碧水幽幽泉 2017-11-06
  • 打赏
  • 举报
回复
不要写这么长进去啊,直接从表里面读取字段。
给你一个测试脚本:

--1.创建测试表
with tmp as
(
select '{"emplid":"A2001","Name":"张三","sip":"566669@qq.com","ename":"ZHANGSAN"}' str from dual union all
select '{"emplid":"A2002","Name":"李四","sip":"66688899@qq.com","ename":"LISI"}' str from dual union all
select '{"emplid":null,"Name":null,"sip":"null","ename":null}' str from dual
)
--2.sql实现
select str, substr(str,instr(str,',',1,2)+8,instr(str,',',1,3)-instr(str,',',1,2)-9) from tmp
-一个大坑 2017-11-06
  • 打赏
  • 举报
回复
引用 5 楼 qq646748739 的回复:
格式化下
select json字段,substr(str,instr(json字段,',',1,2)+8,instr(json字段,',',1,3)-instr(json字段,',',1,2)-9) from 表名称
这样可以,就是写的好长。如果是12的版本怎么写?

select '{"emplid":"A2001","Name":"张三","sip":"566669@qq.com","ename":"ZHANGSAN"}',
       substr('{"emplid":"A2001","Name":"张三","sip":"566669@qq.com","ename":"ZHANGSAN"}',
              instr('{"emplid":"A2001","Name":"张三","sip":"566669@qq.com","ename":"ZHANGSAN"}',
                    ',',
                    1,
                    2) + 8,
              instr('{"emplid":"A2001","Name":"张三","sip":"566669@qq.com","ename":"ZHANGSAN"}',
                    ',',
                    1,
                    3) - instr('{"emplid":"A2001","Name":"张三","sip":"566669@qq.com","ename":"ZHANGSAN"}',
                               ',',
                               1,
                               2) - 9)
  from dual
碧水幽幽泉 2017-11-06
  • 打赏
  • 举报
回复
str改成json字段
-一个大坑 2017-11-06
  • 打赏
  • 举报
回复
引用 5 楼 qq646748739 的回复:
格式化下
select json字段,substr(str,instr(json字段,',',1,2)+8,instr(json字段,',',1,3)-instr(json字段,',',1,2)-9) from 表名称
str要填什么?

select '{"emplid":"A2001","Name":"张三","sip":"566669@qq.com","ename":"ZHANGSAN"}',substr(str,instr('{"emplid":"A2001","Name":"张三","sip":"566669@qq.com","ename":"ZHANGSAN"}',',',1,2)+8,instr('{"emplid":"A2001","Name":"张三","sip":"566669@qq.com","ename":"ZHANGSAN"}',',',1,3)-instr('{"emplid":"A2001","Name":"张三","sip":"566669@qq.com","ename":"ZHANGSAN"}',',',1,2)-9) from dual
-一个大坑 2017-11-06
  • 打赏
  • 举报
回复
引用 2 楼 wmxcn2000 的回复:
哪个版本的库?12c 可以直接处理json数据。 11g 及以下版本,就要麻烦一些,可以用正则,也可以使用 instr 和 substr 这两个函数了。
11g,substr 要指定长度,虽然格式固定,但是姓名邮箱可能长度不一
碧水幽幽泉 2017-11-06
  • 打赏
  • 举报
回复
格式化下
select json字段,substr(str,instr(json字段,',',1,2)+8,instr(json字段,',',1,3)-instr(json字段,',',1,2)-9) from 表名称
碧水幽幽泉 2017-11-06
  • 打赏
  • 举报
回复
这个SQL可以解决你的问题: [code=sql]select json字段,substr(str,instr(json字段,',',1,2)+8,instr(json字段,',',1,3)-instr(json字段,',',1,2)-9) from 表名称[code]
碧水幽幽泉 2017-11-06
  • 打赏
  • 举报
回复
这个问题用python做就很方便了。
Hive也好做,写个UDF函数,也可以获取sip的值。
Oracle就麻烦些~
卖水果的net 2017-11-06
  • 打赏
  • 举报
回复
哪个版本的库?12c 可以直接处理json数据。 11g 及以下版本,就要麻烦一些,可以用正则,也可以使用 instr 和 substr 这两个函数了。
-一个大坑 2017-11-06
  • 打赏
  • 举报
回复
另外邮箱取出来后我会拼接在一起,拼接好后去掉第一个字符 MAIL := SUBSTR(MAIL, 1); 报这个错 Compilation errors for PROCEDURE SENDCAR.P_TEST Error: Hint: Value assigned to 'MAIL' never used in 'P_TEST'

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧