次のUDFはXMLパラメータを入力として取り、バイナリ形式でXML値を取得し、バイナリ形式で戻りXML値を設定します。XMLサイズは小さく、単純な読み取りを使用して読み取るのに十分であると想定されています。
CREATE FUNCTION xmlUDF6(P1 XML)
RETURNS XML
NO SQL
PARAMETER STYLE SQL
DETERMINISTIC
LANGUAGE C
EXTERNAL NAME 'CS!xmlUDF6!xmlUDF6.c';
void xmlUDF6(XML_HANDLE* xml_handle,
XML_HANDLE* return_handle,
int* indicator_thisXML,
int* indicator_returnValue,
char sqlstate[6],
SQL_TEXT extname[129],
SQL_TEXT specific_name[129],
SQL_TEXT error_message[257] )
{
FNC_XMLSize_t xmlSize;
byte* xmlBuffer;
FNC_XMLSize_t xmlBufferSize;
int numLobs;
/* Get the XML Size */
FNC_GetXMLInfo(*xml_handle, &xmlSize, &numLobs);
if(numLobs ==1 )
{ /* Return null if a LOB is passed in */
*indicator_returnValue = -1;
return;
}
/* Read the XML value */
xmlBuffer = (byte*)FNC_Malloc(xmlSize);
xmlBufferSize = xmlSize;
FNC_GetXMLByte(*xml_handle,xmlBuffer, xmlBufferSize, &xmlSize);
/* Set the return value */
FNC_SetXMLByte(*return_handle, xmlBuffer, xmlSize);
*indicator_returnValue = 0;
FNC_free(xmlBuffer);
}