使用存储过程进行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 重新开始注册流程。

示例: 以下代码执行以下步骤:
  1. 使用XML模式文档注册XML模式。
  2. 向XML模式添加另一个XML模式文档。
  3. 完成XML架构的注册。
  4. 删除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);

}