Stringify массив объекта в хранимой процедуре оракула - PullRequest
0 голосов
/ 26 октября 2018

Можно ли привести в массив массив объектов в 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);

Я хочу вернуть VARCHAR2 в результате хранимой процедуры вOracle.

varchar2 будет содержать содержимое массива в формате json.

1 Ответ

0 голосов
/ 26 октября 2018

Да, вам понадобится 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...