次の関数は入力のCLOB値を受け取り、XML値をユーザーに返します。
CREATE FUNCTION xmlUDF4(P1 CLOB AS LOCATOR)
RETURNS XML
NO SQL
PARAMETER STYLE SQL
DETERMINISTIC
LANGUAGE C
EXTERNAL NAME 'CS!xmlUDF4!xmlUDF4.c';
void xmlUDF4(LOB_LOCATOR* input_clob,
XML_HANDLE *xml_handle,
int* indicator_inputCLOB,
int* indicator_returnXML,
char sqlstate[6],
SQL_TEXT extname[129],
SQL_TEXT specific_name[129],
SQL_TEXT error_message[257] )
{
LOB_RESULT_LOCATOR xmlClob;
BYTE buffer[100000];
LOB_CONTEXT_ID id;
FNC_LobLength_t actlen;
int trunc_err = 0;
int numLobs;
FNC_XMLSize_t xmlSize;
/* Get the XML Size */
FNC_GetXMLInfo(*xml_handle, &xmlSize, &numLobs);
if(numLobs ==1 )
{
/* Read XML return lob locator */
FNC_GetXMLResultClob(*xml_handle,&xmlClob);
/* Use LOB FNC calls to read the input CLOB into the XML clob */
FNC_LobOpen(*input_clob, &id, 0, 0);
while( FNC_LobRead(id, buffer, 100000, &actlen) == 0 && !trunc_err)
trunc_err = FNC_LobAppend(*xmlClob, buffer, actlen, &actlen);
FNC_LobClose(id);
/* Set the return XML value */
FNC_SetXMLClob(*xml_handle,xmlClob);
*indicator_returnXML = 0;
}
}