Я пытаюсь преобразовать тип записи, определенный в пакете PL / SQL, в JSON.
Я обнаружил, что в SQL я могу использовать select json_object(*) from SomeTable
для возврата объектов, у которых есть свойство для каждого столбца в таблице, но я не могу сделать это с типами записей в коде PL / SQL.
Пример пакета с типами и функцией для возврата (сериализации) json на основе типа:
create or replace package Customer as
type RT_Address is record (
Line1 varchar2(100),
Line2 varchar2(100),
City varchar2(100)
);
type RT_Customer is record (
FirstName varchar2(100),
LastName varchar2(100),
Address RT_Address
);
function AsJson(P_Customer RT_Customer)
return varchar2;
end;
create or replace package body devvanessa.Customer as
function AsJson(P_Customer RT_Customer)
return varchar2 is
V_DOM jdom_t;
V_JSON json_object_t;
V_JSONBody varchar2(4000);
begin
V_JSON := json_object(P_Customer); -- PLS-00103: Encountered the symbol when expecting one of the following: . ( * @ % & - + / at mod remainder rem <een exponent (**)> || multiset value
if V_DOM.append(P_CUSTOMER) then -- PLS-00306: wrong number or types of arguments
null;
end if;
V_JSONBody := V_Json.STRINGIFY;
return V_JSONBody;
end;
end;
Вышеупомянутое немного упрощено, потому что я действительно хочу сохранить этот json и сделать с ним другие вещи, но он показывает суть моей проблемы:
Как преобразовать тип записи в Json в PL / SQL без отдельного указания всех отдельных полей. Мне также любопытно, как это будет работать наоборот.
Я искал различные источники, например документация по функциям JSON, документация Oracle 19 JSON и просто автозавершение кода подсказки, которые я получил по типам json_object_t
и jdom_t
, но пока я не могу найти никаких доказательств того, что это вообще возможно.
Это сработает:
V_JSon.Put('FirstName', P_Customer.FirstName);
-- repeated for each property
Таким образом я получаю json, но для этого нужно указывать каждое поле индивидуально.