【发布时间】:2020-04-13 03:05:52
【问题描述】:
我可以找到一个由 PL/SQL 使用 XML 模式实现的 XML 验证器。有没有类似的方法在 PL/SQL 中使用 JSON 模式来验证 JSON?
XML 验证器-https://oracle-base.com/articles/misc/validate-xml-against-xml-schema-xsd
【问题讨论】:
标签: json database validation plsql schema
我可以找到一个由 PL/SQL 使用 XML 模式实现的 XML 验证器。有没有类似的方法在 PL/SQL 中使用 JSON 模式来验证 JSON?
XML 验证器-https://oracle-base.com/articles/misc/validate-xml-against-xml-schema-xsd
【问题讨论】:
标签: json database validation plsql schema
您可以创建一个带有 JSON 约束列的 JSON 表,并使用它。
CREATE TABLE my_json_table (
id RAW(16) NOT NULL,
json_data CLOB,
CONSTRAINT myjson_headers_pk PRIMARY KEY (id),
CONSTRAINT myjson_json_chk CHECK (json_data IS JSON)
);
CREATE OR REPLACE FUNCTION is_json_valid (p_json IN CLOB)
RETURN BOOLEAN IS
e_invalid EXCEPTION;
PRAGMA EXCEPTION_INIT (e_invalid, -1000);
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO my_json_table (id, json_data)
VALUES (SYS_GUID(), p_json);
ROLLBACK;
RETURN TRUE;
EXCEPTION
WHEN e_invalid THEN
RETURN FALSE;
END;
【讨论】:
Oracle 中没有 JSON 模式验证器。
但是您可以想出一个解决方法。 您可以像在 XML 中一样构建架构,将 JSON 解析为 XML,然后根据您的架构验证 XML。
您可以在下面找到如何将 JSON 解析为 XML:
DECLARE
l_json VARCHAR2(32767);
l_xml XMLTYPE;
BEGIN
l_json := '[
{"department_number":10,"department_name":"ACCOUNTING"},
{"department_number":20,"department_name":"RESEARCH"}
]';
l_xml := APEX_JSON.to_xmltype(l_json );
DBMS_OUTPUT.put_line(l_xml.getClobVal());
END;
输出:
<?xml version="1.0" encoding="UTF-8"?>
<json>
<row>
<department_number>10</department_number>
<department_name>ACCOUNTING</department_name>
</row>
<row>
<department_number>20</department_number>
<department_name>RESEARCH</department_name>
</row>
</json>
否则您必须进行服务验证。
【讨论】: