DB2 pureXML Cookbook – Errata
September 14, 2010
It’s been a little bit over one year now since we published the DB2 pureXML Cookbook. Many copies have been sold and we have received a lot of positive feedback from many readers (thanks!).
When you write a book with more than 700 coded examples of SQL/XML, XQuery, updates, XML Schemas, indexes, stored procedures, triggers, and application code samples in Java, C, COBOL, etc., it’s inevitable that some errors creep in and remain undetected before the book goes into print.
Luckily we have some very observant readers that are using this book in their DB2 pureXML projects and are paying a lot of attention to detail. They have discovered several mistakes in the book. Fortunately, most of these errata are quite small and syntax-related glitches rather than major disasters.
The errata that we currently know about are listed below, and we will continue to list any further errata on the web page at
By the way, IBM Press has a promotion where this and other books are currently available at a 35% discount.
On the bottom of page 216, in Figure 8.41, 3rd line: “AS id” should be “AS idstatus” to match the query output on the top of page 217.
If we want the query in Figure 10.24 to return the exact same result as the query in Figure 10.23, two attribute names would have to be changed in Figure 10.24. That is, it should be
XMLATTRIBUTES(po.poid as “oid”),
XMLATTRIBUTES(po.poid as “id”),
XMLATTRIBUTES(promoprice as “promoprice”),
XMLATTRIBUTES(promoprice as “lowprice”),
The two queries in Figure 13.12 can be improved. The first query should cast to Varchar(500) instead of Varchar(50), to be on the safe side in case some titles are long. The second query in Figure 13.12 should cast the string-length to INTEGER instead of Varchar(500).
In Table 13.6 and 13.7 the paths for the attribute “@isbn” are wrong. The @isbn attribute is an attribute of the book element, not of the title element. So the correct path is /book/@isbn .
In Figure 21.15, the parameter index in the 2nd SQLBindParameter call should be 2, not 1. So, the bind call should be
SQLBindParameter(stmt, 2, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_XML, 0, 0, xmldoc, 32000, &length);
SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_XML, 0, 0, xmldoc, 32000, &length);
In Figure 21.19, the “PASSING” clause in the XMLEXISTS predicate is incomplete. It should be
PASSING info AS “i”, CAST(:cid AS INTEGER) AS “c”)
PASSING CAST(:cid AS INTEGER) AS “c”)
If you discover any other mistakes that we made in the book, please do let us know. Thanks!