次の関数はXML型のパラメータを受け取り、XMLのBLOB表現を取得します。これはユーザーにBLOBを返します。
CREATE FUNCTION xmlUDF5(P1 XML)
RETURNS BLOB AS LOCATOR
NO SQL
PARAMETER STYLE SQL
DETERMINISTIC
LANGUAGE C
EXTERNAL NAME 'CS!xmlUDF5!xmlUDF5.c';
void xmlUDF5(XML_HANDLE *xml_handle,
LOB_RESULT_LOCATOR *return_blob,
int* indicator_thisXML,
int* indicator_returnLOB,
char sqlstate[6],
SQL_TEXT extname[129],
SQL_TEXT specific_name[129],
SQL_TEXT error_message[257] )
{
LOB_LOCATOR xmlBlob;
BYTE buffer[100000];
LOB_CONTEXT_ID id;
FNC_LobLength_t actlen;
int trunc_err = 0;
FNC_XMLSize_t xmlSize;
int numLobs;
/* Get the XML Size */
FNC_GetXMLInfo(*xml_handle, &xmlSize, &numLobs);
if(numLobs ==1 )
{
/* Read XML value */
FNC_GetXMLBlob(*xml_handle,&xmlClob);
/* Use LOB FNC calls to read the XML BLOB and return it */
FNC_LobOpen(*xmlBlob, &id, 0, 0);
while( FNC_LobRead(id, buffer, 100000, &actlen) == 0 && !trunc_err)
trunc_err = FNC_LobAppend(*return_blob, buffer, actlen, &actlen);
FNC_LobClose(id);
*indicator_returnLob = 0;
}
}