CREATE OR REPLACE PROCEDURE get_emp_json (p_empno IN emp.empno%TYPE DEFAULT NULL) AS
l_cursor SYS_REFCURSOR;
BEGIN
OPEN l_cursor FOR
SELECT e.empno AS "empno",
e.ename AS "employee_name",
e.job AS "job",
e.mgr AS "mgr",
TO_CHAR(e.hiredate,'YYYY-MM-DD') AS "hiredate",
e.sal AS "sal",
e.comm AS "comm",
e.deptno AS "deptno"
FROM emp e
WHERE e.empno = DECODE(p_empno, NULL, e.empno, p_empno);
APEX_JSON.open_object;
APEX_JSON.write('employees', l_cursor);
APEX_JSON.close_object;
END;
/
2条答案
按热度按时间kuhbmx9i1#
oracle 11g不支持json。这是12世纪第一次出现。但是,有一个解决方法。oracleapplicationexpress5.1.4与11g兼容,它有自己的json生成器(apex\ujson)。您需要在数据库中安装它。
考虑oracle apex和oracle数据库之间的矩阵兼容性:
对于apex 5.0,最低数据库版本为11.1.0.7
对于apex 5.1,最低数据库版本为11.2.0.4
对于apex 18.1、18.2、19.1,最低数据库版本为11.2.0.4
即使在11g中,您也可以以json格式将apex\u json的输出检索为clob。
例子
1.此过程使用apexïu json检索json中的信息
2.构建ords rest模块(在您自己的模式中)
3.调用rest web服务
早在我使用它的时候,oracle11g并没有处理json,只是通过复杂的sql机制。通过这种方式,您可以轻松构建用于检索json格式数据的web服务。
mwkjh3gx2#
所以在oracle11g中没有内置的json支持。从12c开始,在你的例子中,我用数据库上的java支持构建了它。有大量的java资源可以处理json(即使是Java7,它是最新11gr2上支持的jvm)。
其想法是为该用例创建一个(流水线)表函数,该函数使用用户定义的类型输出json结果。
如果有一个数据库链接,我会先尝试一下,因为那些表函数并不总是很有性能。