Start of change

Example: Referencing XML host variables in embedded SQL applications

The following sample applications demonstrate how to reference XML host variables in C and COBOL.

Embedded SQL C application:

EXEC SQL BEGIN DECLARE; 
  SQL TYPE IS XML AS CLOB( 10K ) xmlBuf; 
  SQL TYPE IS XML AS BLOB( 10K ) xmlblob; 
  SQL TYPE IS CLOB( 10K ) clobBuf; 
EXEC SQL END DECLARE SECTION; 
// using XML AS CLOB host variable
// The XML value written to xmlBuf will be prefixed by an XML declaration
// similar to: <?xml version = "1.0" encoding = "UTF-8"?> 
// Note: The encoding name will depend upon the SQL_XML_DATA_CCSID QAQQINI setting
EXEC SQL SELECT xmlCol INTO :xmlBuf 
  FROM myTable 
  WHERE id = '001'; 
EXEC SQL UPDATE myTable 
  SET xmlCol = :xmlBuf 
  WHERE id = '001'; 

// using XML AS BLOB host variable
// The XML value written to xmlblob will be prefixed by an XML declaration 
// similar to: <?xml version = "1.0" encoding = "UTF-8"?> 
EXEC SQL SELECT xmlCol INTO :xmlblob 
  FROM myTable 
  WHERE id = '001'; 
EXEC SQL UPDATE myTable 
  SET xmlCol = :xmlblob 
  WHERE id = '001'; 

// using CLOB host variable
// The output will be encoded in the application single byte default CCSID, 
// but will not contain an XML declaration 
EXEC SQL SELECT XMLSERIALIZE (xmlCol AS CLOB(10K)) INTO :clobBuf 
  FROM myTable 
  WHERE id = '001'; 
EXEC SQL UPDATE myTable 
  SET xmlCol = XMLPARSE (:clobBuf PRESERVE WHITESPACE) 
  WHERE id = '001';

Embedded SQL COBOL application:

EXEC SQL BEGIN DECLARE SECTION END-EXEC. 
  01 xmlBuf USAGE IS SQL TYPE IS XML as CLOB(5K). 
  01 clobBuf USAGE IS SQL TYPE IS CLOB(5K). 
  01 xmlblob USAGE IS SQL TYPE IS XML AS BLOB(5K). 
EXEC SQL END DECLARE SECTION END-EXEC. 

* using XML AS CLOB host variable 
EXEC SQL SELECT xmlCol INTO :xmlBuf 
  FROM myTable 
  WHERE id = '001'. 
EXEC SQL UPDATE myTable 
  SET xmlCol = :xmlBuf 
  WHERE id = '001'. 

* using XML AS BLOB host variable 
EXEC SQL SELECT xmlCol INTO :xmlblob 
  FROM myTable 
  WHERE id = '001'. 
EXEC SQL UPDATE myTable 
  SET xmlCol = :xmlblob 
  WHERE id = '001'. 

* using CLOB host variable
EXEC SQL SELECT XMLSERIALIZE(xmlCol AS CLOB(10K)) INTO :clobBuf 
  FROM myTable 
  WHERE id= '001'. 
EXEC SQL UPDATE myTable 
  SET xmlCol = XMLPARSE(:clobBuf) PRESERVE WHITESPACE 
  WHERE id = '001'.
End of change