Я довольно любитель Oracle DB и PL / SQL в целом, но, тем не менее, мне нужно взаимодействовать с Oracle DB.
У меня есть хранимая процедура PL / SQL с выходным параметром, который представляет собой многоуровневую коллекцию:
declare
TYPE level_a_type IS RECORD
(
text varchar2(6),
data number
);
TYPE level_a_table IS TABLE of level_a_type INDEX BY PLS_INTEGER;
TYPE level_b_type IS RECORD
(
value number,
included_table level_a_table
);
TYPE level_b_table IS TABLE of level_b_type INDEX BY PLS_INTEGER;
Я вызываю процедуру и генерирую XML вручную на stdout, как это
set serveroutput on
declare
result level_b_type;
n integer;
begin
n := mypackage.mystoredprocedure(result);
FOR i IN 1 .. result.count LOOP
dbms_output.putline('<levelb value="'||result(i).level_b_value||'" >');
FOR k IN 1 .. result(i).included_table.count LOOP
dbms_output.putline('<levela text="'||result(i).included_table(k).text||'" data="'||result(i).included_table(k).data||" '/>');
END LOOP;
dbms_output.putline('</levelb>');
END LOOP;
end;
Однако это довольно громоздко для поддержания. Итак, есть ли ярлык PL / SQL для выполнения чего-то вроде XML_gen(result)
, который будет ретроспективно смотреть на level_b_table
и автоматически генерировать что-то подобное?
<levelb value="1">
<levela text="Hello" data="1" />
<levela text="World" data="2" />
</levelb>