Oracle SQL脚本注册Restful API服务,只适用于简单的查询,在以往Oracle EBS开发中,经常遇到比较复到的查询,比如将查询的部分数据存放在临时表中,或者5张以上的表或视图关联查询,Oracle SQL脚本注册Restful API服务无法满足,需求开发存储过程,通过输出参数返回游标。因此,需要支持Oracle存储程序注册Restful API服务。
一、创建存储过程:
Oracle存储过程代码如下:
CREATE OR REPLACE PROCEDURE Cux_Query_Data(x_Cursor_Person OUT SYS_REFCURSOR
,x_Cursor_User OUT SYS_REFCURSOR
,x_Result OUT VARCHAR2) IS
BEGIN
OPEN x_Cursor_User FOR
SELECT Id
,NAME
,Pinyin
FROM Crm_User t
WHERE t.Pinyin = 'chenxianping';
OPEN x_Cursor_Person FOR
SELECT Email
,Login_Name
,Sex
FROM Oa_Sys_Org_Person t
WHERE t.Login_Name = 'chenxianping';
x_Result := '成功查询!';
EXCEPTION
WHEN OTHERS THEN
x_Result := '操作失败:' || SQLERRM;
END Cux_Query_Data;
存储过程二个游标输出参数和一个字符串出输参数。
二、存储过程注册Restful API服务:
存储过程注册Restful API服务比SQL脚本注册Restful API服务简单方便许多,只需要注册通用Restful API对象,存储过程的参数该系统自动添加,节省75%~90%以上工作量。
请求URL:http://localhost:6602/db/api/apiobject/add
请求方法:POST
请求报文参考如下
{
"apiCode": "OA_QUERY_ORG_USER",
"description": "查询OA组织架构用户相关信息",
"owner": "CRM",
"packageName": "",
"objectName": "CUX_QUERY_DATA",
"overLoad": "",
"dataObjectType": 2,
"dataSourceName": "ELIN_CRM"
}
请求响应报文参考如下:
{
"success": true,
"message": "New success!",
"code": 200,
"timestamp": 1613549733369,
"result": {
"apiId": 43,
"apiCode": "OA_QUERY_ORG_USER",
"description": "查询OA组织架构用户相关信息",
"owner": "CRM",
"packageName": "",
"objectName": "CUX_QUERY_DATA",
"overLoad": "",
"dataObjectType": 2,
"callScripts": "{call CRM.CUX_QUERY_DATA(:1,:2,:3)}",
"dataSourceId": 2,
"serviceId": null,
"enabledFlag": true,
"queryResultFlag": false,
"dataSourceName": "ELIN_CRM",
"dataBaseType": 1,
"argumentCount": 3,
"sequenceName": "CRM_COMMMON_IFACE_S"
}
}
操作实例图片参考如下:
三、获得调用通用Restful API服务请求报文格式:
请求URL:http://localhost:6602/db/api/exmaple/OA_QUERY_ORG_USER
请求方法:GET
请求响应报文参考如下:
{
"xCursorPerson": null,
"xCursorUser": null,
"xResult": null
}
操作实例图片参考如下:
四、调用Restful API服务OA_QUERY_ORG_USER:
请求URL:http://localhost:6602/db/api/callapi?apiCode=OA_QUERY_ORG_USER
请求方法:POST
请求报文参考如下:
{
"xCursorPerson": null,
"xCursorUser": null,
"xResult": null
}
请求响应报文参考如下:
{
"success": true,
"message": "success",
"code": 200,
"timestamp": 1613550604584,
"result": {
"xCursorPerson": [
{
"loginName": "chenxianping",
"sex": "M",
"email": "chenxianping@elin.net"
}
],
"xCursorUser": [
{
"pinyin": "chenxianping",
"name": "陈显平",
"id": 687451
}
],
"xResult": "成功查询!"
}
}
操作实例图片参考如下: