Вариант использования:
Приложение требует подмножество атрибутов, основанных на бизнес-правилах
Пример:
Некоторым студентам не требуется вводить домашний адрес
База данных: Oracle
Предлагаемая реализация:
Создайте объект json, содержащий все возможные пары именованных атрибутов, затем выборочно удалите определенные именованные пары
Проблема:
Надеялся использовать встроенную функцию Oracle для удаления указанной именованной пары.
например, json_object.remove_attribute ('home_address');
Однако Oracle, похоже, не предоставляет ни одного такого метода.
Обходной путь: преобразуйте json_object в строку VARCHAR2, а затем используйте комбинацию INSTR и REPLACE для удаления именованной пары.
Иллюстративный код:
DECLARE
CURSOR cur_student_json (p_s_ref IN VARCHAR2) IS
SELECT JSON_OBJECT(
,'s_surname' value s.s_surname
,'s_forename_1' value s.s_forename_1
,'s_home_address_1' value s.s_home_address_1
RETURNING VARCHAR2 ) student_json
FROM students s
WHERE s.s_ref = p_s_ref;
BEGIN
FOR x IN cur_student_json (p_s_ref) LOOP
vs_student_json:=x.student_json;
EXIT;
END LOOP;
-- Determine student type
vs_student_type:=get_student_type(p_s_ref);
-- Collect list of elements not required, based on student type
FOR x IN cur_json_inorout(vs_student_type) LOOP
-- Remove element from the json
vs_student_json:=json_remove(vs_student_json,x.attribute);
END LOOP;
END;
/
Вопрос:
Должен быть элегантный метод для достижения требования