【发布时间】:2019-05-28 16:13:13
【问题描述】:
用例: 应用程序需要基于业务规则的属性子集
示例: 有些学生不需要输入家庭住址
数据库:甲骨文
建议的实施: 构建包含所有可能的属性命名对的 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;
/
问题: 必须有一个优雅的方法来实现需求
【问题讨论】: