Oracle Database 23c在简化开发、应对开发发力了,更多拥抱开发者方面的能力,真的是人惊讶,这几天也是参加Oracle官方组织的AI专家培训,受益非浅,在这里给大家分享一下通过 ORDS操作对外暴露Http Restful服务,达到以 JSON对象形式快速简便操作多张关系表的效果。
1.ORDS介绍
ORDS(Oracle REST 数据服务)是Oracle REST服务,它为以Oracle为中心的应用程序提供类似的标准化。它使具有SQL和其他数据库技能的开发人员能够构建对Oracle数据库的企业级数据访问PI。
当今的现代、最先进的应用程序开发人员希望使用这些API,并且确实越来越需要使用这些API来构建应用程序。这样我们可以通过安全、高性能的 HTTPS 访问 Oracle 数据库。
2.ORDS配置
1.下载ORDS,从这里下载最新版本的 ORDS: http://www.oracle.com/technetwork/developer-tools/rest-data-services/downloads/index.html 2.解压缩ORDS安装包,解锁用户 ALTER USER ORDS_PUBLIC_USER IDENTIFIED BY OraPassword1 ACCOUNT UNLOCK; 3.创建目录以保存配置 4.编辑ORDS软件ords_params.properties文件, 并为您的安装设置适当的参数。 5.启动ORDS ./startup.sh 6: 验证ORDS是否启动成功 curl http://localhost:8080/ords
复制
3.JSON 关系二元性
3.1 创建二元性视图
二元性视图底层是传统关系表,创建二元性视图时需声明二元性视图与底层关系表之间的关系
Duality View 只需要用 select语句来声明view与table之间的关系。
CREATE [ OR REPLACE ] [ [ NO ] FORCE ] [ EDITIONABLE | NONEDITIONABLE ] JSON [ RELATIONAL ] DUALITY VIEW [ IF NOT EXISTS ] view_name AS { { SELECT object_gen_clause FROM root_table [ root_table_alias ] [ table_tags_clause ] } | ( graphql_query_for_DV ) }
复制
3.2 开启REST服务
DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN ORDS.ENABLE_OBJECT(p_enabled => TRUE, p_schema => 'USER0', p_object => 'ORDER_DV', p_object_type => 'VIEW', p_object_alias => 'order_dv', p_auto_rest_auth => FALSE); commit; END; / ORDER_DV为二元视图的名称 WITH INSERT UPDATE DELETE为操作的权限
复制
3.3 操作二元性视图
它的地址前缀规则是 http://${ip}:${ords_port}/ords/${db_user}/${object_name}/ a) 普通查询 规则是http://${ip}:${ords_port}/ords/${db_user}/${object_name}/ b) 分页查询 curl -s 'http://localhost:8080/ords/<数据库用户名>/order_dv/?offset=1&limit=1' | jq . c) 条件查询 规则是 http://${ip}:${ords_port}/ords/${db_user}/${object_name}/?q=${查询条件} d)新增 在 Linux 命令行中,执行如下命令 curl -s -X POST 'http://localhost:8080/ords/<数据库用户名>/order_dv/' \ --header 'Content-Type: application/json' \ --data '{ "_id":"#####", .... }' d)更新 curl -s -X POST 'http://localhost:8080/ords/<数据库用户名>/order_dv/' \ --header 'Content-Type: application/json' \ --data '{ "_id":"#####", "_metadata" : {"etag" : " #######"}, .... }' 这里也就是使用ETAG 提交,即可更新 e)删除 curl -s -X DELETE http://localhost:8080/ords/<数据库用户名>/order_dv/##### | jq .
复制
4.原生JSON
Oracle23ai 中全新引入了NATIVE JSON 这个新的数据类型,在存储空间占用,数据访问效率,操作便利性方面都有长足的提升。 NATIVE JSON 相对于之前的Oracle数据库版本使
用 BLOB 类型来存储JSON,在空间节省方面有相当大的改善。
在这里给大家展示一个多值索引 基于多值函数的索引允许我们对存储在 JSON 数据类型中的 JSON 文档中的多个标量值进行索引。 这可以提高包含 JSON_EXISTS 条件的查询的性能。 create multivalue index t1_test on test t (t.json_data.words.pages.number()); 可以看到执行计划中使用了多值索引
复制
5.总结
Oracle和JSON结合起来,可谓是真正的王炸啊,其实有很多的第三方开放平台,可以允许我们去调用他们的开放接口,相比来说,由Oracle Database 23ai代表用户管理文档级可串行性。大家可以继续使用简单的 HTTP PUT、POST 及 GET 操作,或者直接针对 Oracle Database 使用特定语言的 API,例如 Oracle SODA API 甚至 MongoDB API。有了 JSON Duality Views,“鱼与熊掌不可兼得”将彻底成为历史。