使用存储过程进行XML模式注册和删除的示例
Db2 提供了、、 和 存储过程。 SYSPROC.XSR_REGISTER SYSPROC.XSR_ADDSCHEMADOC SYSPROC.XSR_COMPLETE SYSPROC.XSR_REMOVE 这些存储过程允许您注册和删除XML模式及其组件。
要使用单个XML模式文档注册XML模式,请致电 SYSPROC.XSR_REGISTER 和 SYSPROC.XSR_COMPLETE。
要注册包含多个XML模式文档的XML模式,请发送电子邮件至 SYSPROC.XSR_REGISTER ,获取第一个模式文档,然后分别发送电子邮件至 SYSPROC.XSR_ADDSCHEMADOC 和 SYSPROC.XSR_COMPLETE ,获取其他模式文档。
要删除一个XML模式,请发送电子邮件至 SYSPROC.XSR_REMOVE。
如果您已经通过 SYSPROC.XSR_COMPLETE 修改了XML模式的内容,则需要通过 SYSPROC.XSR_REMOVE 重新开始注册流程。
示例: 以下代码执行以下步骤:
- 使用XML模式文档注册XML模式。
- 向XML模式添加另一个XML模式文档。
- 完成XML架构的注册。
- 删除XML模式。
EXEC SQL BEGIN DECLARE SECTION;
/********************************************************************/
/* Declare variables: */
/* For SYSPROC.XSR_REGISTER parameters: */
/* Parameter name Value */
/* rschema Schema of the XML schema (must be 'SYSXSR')*/
/* name XML schema name */
/* schemaLocation URI for the XML schema */
/* content XML schema document to be registered */
/* docProperties XML schema document information for an */
/* external XML schema registry */
/* For SYSPROC.XSR_ADDSCHEMADOC parameters: */
/* Parameter name Value */
/* rschema Same as for SYSPROC.XSR_REGISTER */
/* name Same as for SYSPROC.XSR_REGISTER */
/* schemaLocation Same as for SYSPROC.XSR_REGISTER */
/* content Same as for SYSPROC.XSR_REGISTER */
/* docProperties Same as for SYSPROC.XSR_REGISTER */
/* For SYSPROC.XSR_COMPLETE parameters: */
/* Parameter name Value */
/* rschema Same as for SYSPROC.XSR_REGISTER */
/* name Same as for SYSPROC.XSR_REGISTER */
/* schemaProperties XML schema information for an external */
/* XML schema registry */
/* issuedForDecomp Indicator: Must be 0 */
/* For SYSPROC.XSR_REMOVE parameters: */
/* Parameter name Value */
/* rschema Same as for SYSPROC.XSR_REGISTER */
/* name Same as for SYSPROC.XSR_REGISTER */
/********************************************************************/
struct {
short len;
char text[128]; } rschema;
struct {
short len;
char text[128]; } name;
struct {
short len;
char text[1000]; } schemaLocation;
SQL TYPE IS BLOB (1M) content;
SQL TYPE IS BLOB (1M) docProperties;
SQL TYPE IS BLOB (1M) schemaProperties;
long issuedForDecomp;
EXEC SQL END DECLARE SECTION;
…
main
{
/********************************************************************/
/* Assign the schema for the XML schema ('SYSXSR') to rschema. */
/********************************************************************/
strcpy(rschema.text,"SYSXSR");
rschema.len=strlen(rschema.text);
/********************************************************************/
/* Assign the XML schema name 'ORDER' to name. */
/********************************************************************/
strcpy(name.text,"ORDER");
name.len=strlen(name.text);
/********************************************************************/
/* Assign the XML schema location 'http://posample.org' to */
/* schemaLocation. */
/********************************************************************/
strcpy(schemaLocation.text,"http://posample.org");
schemaLocation.len=strlen(schemaLocation.text);
…
/********************************************************************/
/* Read the first XML schema document into host variable content */
/* from a file. */
/********************************************************************/
…
/********************************************************************/
/* No information for this XML schema document needs to be stored */
/* for an external registry, so set docProperties to NULL. */
/********************************************************************/
EXEC SQL SET :docProperties = NULL;
/********************************************************************/
/* Call the SYSPROC.XSR_REGISTER to register SYSXSR.ORDER. */
/********************************************************************/
EXEC SQL
CALL SYSPROC.XSR_REGISTER
(:rschema,:name,:schemaLocation,:content,:docProperties);
…
/********************************************************************/
/* Read the second XML schema document into host variable content */
/* from a file. */
/********************************************************************/
…
/********************************************************************/
/* Copy the contents of the second XML schema document into host */
/* host variable docProperties for storage in the XML schema */
/* repository. */
/********************************************************************/
EXEC SQL SET :docProperties = :content;
/********************************************************************/
/* Call the SYSPROC.XSR_ADDSCHEMADOC to register add the second */
/* document to SYSXSR.ORDER. */
/********************************************************************/
EXEC SQL
CALL SYSPROC.XSR_ADDSCHEMADOC
(:rschema,:name,:schemaLocation,:content,:docProperties);
/********************************************************************/
/* No information for this XML schema needs to be stored */
/* for an external registry, so set schemaProperties to NULL. */
/********************************************************************/
EXEC SQL SET :schemaProperties = NULL;
/********************************************************************/
/* Set schemaProperties to NULL because we are not going to store */
/* any schema properties for SYSXSR.ORDER. */
/********************************************************************/
EXEC SQL SET :schemaProperties=NULL;
/********************************************************************/
/* Set issuedForDecomp to 0 because we are not going to use */
/* SYSXSR.ORDER for decomposition. */
/********************************************************************/
issuedForDecomp=0;
/********************************************************************/
/* Call the SYSPROC.XSR_COMPLETE to complete registration of */
/* SYSXSR.CUSTOMER. */
/********************************************************************/
EXEC SQL
CALL SYSPROC.XSR_COMPLETE
(:rschema,:name,:schemaProperties,:issuedForDecomp);
/********************************************************************/
/* Call the SYSPROC.XSR_REMOVE to delete SYSXSR.CUSTOMER from the */
/* XML schema repository. */
/********************************************************************/
EXEC SQL
CALL SYSPROC.XSR_REMOVE
(:rschema,:name);
}