在Oracle存储过程中Stringify对象数组

时间:2018-10-26 01:08:48

标签: oracle stored-procedures

是否可以在oracle中对对象数组进行字符串化处理。

我有以下对象数组:

ARRAY_REPORT CLIENT_UPDATE_REPORT_ARRAY:=CLIENT_UPDATE_REPORT_ARRAY();
ARRAY_REPORT.EXTEND;
ARRAY_REPORT ( COMPTEUR ) := CLIENT_UPDATE_REPORT ( 
W_CCODE, 
w_raisonsocial, 
2,
W_ETATCLI_LABEL );
ARRAY_REPORT.EXTEND;
ARRAY_REPORT ( COMPTEUR ) := CLIENT_UPDATE_REPORT ( 
W_CCODE, 
w_raisonsocial, 
1,
W_ETATCLI_LABEL);

我想在Oracle存储过程的结果中返回VARCHAR2。

varchar2将以json格式包含数组的内容。

1 个答案:

答案 0 :(得分:1)

是的,您需要Oracle 12.2或更高版本才能使用JSON_OBJECT

CREATE OR REPLACE TYPE typ_employee AS OBJECT ( employee_id INTEGER, first_name VARCHAR2(30) , SALARY NUMBER);
/
CREATE OR REPLACE TYPE typ_employee_array AS TABLE OF typ_employee;
/

SET SERVEROUTPUT ON
DECLARE
     v_emp_array   typ_employee_array := typ_employee_array ();
BEGIN
     v_emp_array.extend(2);
     v_emp_array(1) := typ_employee(100,'HAYTHEM',10000);
     v_emp_array(2) := typ_employee(101,'MAYTHEM',20000);
     FOR rec IN (
          SELECT
               JSON_OBJECT(
                    'emp_id' IS employee_id,
                    'fname' IS first_name,
                    'sal' IS salary
               )
          AS emp_json
          FROM TABLE ( v_emp_array )
     ) LOOP
          dbms_output.put_line(rec.emp_json);
     END LOOP;
END;
/

结果

Type TYP_EMPLOYEE compiled


Type TYP_EMPLOYEE_ARRAY compiled

{"emp_id":100,"fname":"HAYTHEM","sal":10000}
{"emp_id":101,"fname":"MAYTHEM","sal":20000}


PL/SQL procedure successfully completed.