用于带注释的模式分解的 xdbDecompXML 过程
可以通过调用 10 个内置过程的其中一个来调用带注释的 XML 模式分解,这将分解单个 XML 文档。
带注释的 XML 模式分解过程:
- xdbDecompXML
- xdbDecompXML10MB
- xdbDecompXML25MB
- xdbDecompXML50MB
- xdbDecompXML75MB
- xdbDecompXML100MB
- xdbDecompXML500MB
- xdbDecompXML1GB
- xdbDecompXML1_5GB
- xdbDecompXML2GB
以下部分中提供了 xdbDecompXML 的语法;请参阅 xmldoc 参数的描述以了解针对 xdbDecompXML10MB、xdbDecompXML25MB、xdbDecompXML50MB、 xdbDecompXML75MB、xdbDecompXML100MB、xdbDecompXML500MB、 xdbDecompXML1GB、xdbDecompXML1_5GB 和 xdbDecompXML2GB 过程的 xmldoc 参数规范。
语法
此过程的模式为 SYSPROC。
权限
属于调用此过程的语句的授权标识必须拥有下列其中一项特权或权限:
- 需要下列所有特权:
- 对带注释的模式中引用的所有目标表的 INSERT 特权
- 对 db2-xdb:expression 或 db2-xdb:condition 注释引用的任何表的 SELECT , INSERT , UPDATE 或 DELETE 特权 (如果适用)
- 对带注释的模式文档集中引用的所有目标表的 CONTROL 特权
- DATAACCESS 权限
如果 validation 的值为 1,那么属于调用此过程的语句的授权标识必须对 XML 模式具备 USAGE 特权。
过程参数
- rschema
- VARCHAR(128) 类型的输入参数,它指定向 XML 模式存储库注册的两部分 XSR 对象名的 SQL 模式部分。 如果此值为 NULL,那么假定 SQL 模式部分是 CURRENT SCHEMA 专用寄存器的当前值。
- xmlschemaname
- VARCHAR(128) 类型的输入参数,它指定向 XML 模式存储库注册的两部分 XSR 对象名的模式名。 此值不能 为 NULL。
- xmldoc
- BLOB(1M) 类型的输入参数,它指定包含所要分解的 XML 文档的缓冲区。注意:
- 对于 xdbDecompXML10MB 过程,此参数的类型为 BLOB(10M)。
- 对于 xdbDecompXML25MB 过程,此参数的类型为 BLOB(25M)。
- 对于 xdbDecompXML50MB 过程,此参数的类型为 BLOB(50M)。
- 对于 xdbDecompXML75MB 过程,此参数的类型为 BLOB(75M)。
- 对于 xdbDecompXML100MB 过程,此参数的类型为 BLOB(100M)。
- 对于 xdbDecompXML500MB 过程,此参数的类型为 BLOB(500M)。
- 对于 xdbDecompXML1GB 过程,此参数的类型为 BLOB(1G)。
- 对于 xdbDecompXML1_5GB 过程,此参数的类型为 BLOB(1.5G)。
- 对于 xdbDecompXML2GB 过程,此参数的类型为 BLOB(2G)。
- documentId
- VARCHAR(1024) 类型的输入参数,它指定所要分解的输入 XML 文档的标识。 此参数中提供的值将被替换为使用相应 XML 模式中的 db2-xdb:expression 或 db2-xdb:condition 注释中指定的 $DECOMP_DOCUMENTID 。
- 验证
- INTEGER 类型的输入参数,它指示是否对所分解的文档执行验证。 可能的值包括:
- 0
- 在分解输入文档前不对其执行验证。
- 1
- 根据先前向 XML 模式存储库注册的 DTD 或 XML 模式文档来对输入文档执行验证。 只有验证成功后才分解输入 XML 文档。
- 已保留
- reserved 参数是为将来使用而保留的输入参数。 为这些参数传递的值必须是 NULL。
输出
此过程没有显式的输出参数。 请检查 SQLCA 结构的 sqlcode
字段以了解分解期间发生的任何错误。 完成分解后,可能的 sqlcode 值如下所示:
- 0
- 已成功地分解了文档。
- 正整数
- 已成功地分解了文档,但发生了警告情况。 这些警告记录在 db2diag 日志文件中,这些日志文件位于第一次出现的数据捕获 (FODC) 存储目录中。
- 负整数
- 未能分解文档。 SQLCODE 指示故障原因。 请检查 db2diag 日志文件以了解有关故障的详细信息。
使用说明
这些过程在使用读稳定性隔离级别的情况下执行。
这些过程以原子方式运行;如果过程在执行期间失败,就会回滚此过程执行的所有操作。 由于此过程本身并不执行 COMMIT SQL 语句,因此,要落实此过程所作的更改,调用者必须执行 COMMIT 语句。
如果正在使用脚本或应用程序来分解若干个未知大小的文档,请考虑使用 DECOMPOSE XML DOCUMENT 命令来进行分解,而不要使用 xdbDecompXML 过程,原因是该命令会自动调用适合于文档大小的过程。
示例
已向 XML 模式存储库将带注释的 XML 模式注册为 ABC.TEST,该模式指示 XML 值所要分解为的表和列。 要将 XML 文档分解到关系表中,请按如下调用适当的过程:
CALL xdbDecompXML ('ABC', 'TEST', BLOB('<Element1>Hello world</Element1>'),
'DOCID', 0 , NULL, NULL, NULL)