次の関数はXML型のパラメータを受け取り、XMLのCLOB表現を取得します。これはユーザーにCLOBを返します。
CREATE FUNCTION xmlUDF2(P1 XML) RETURNS CLOB AS LOCATOR NO SQL PARAMETER STYLE SQL DETERMINISTIC LANGUAGE C EXTERNAL NAME 'CS!xmlUDF2!xmlUDF2.c'; void xmlUDF2(XML_HANDLE *xml_handle, LOB_RESULT_LOCATOR *return_clob, 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 xmlClob; BYTE buffer[100000]; LOB_CONTEXT_ID id; FNC_LobLength_t actlen; int trunc_err = 0; int numLobs; FNC_XMLSize_t xmlSize; FNC_GetXMLInfo(*xml_handle, &xmlSize, &numLobs); if(numLobs == 1) { /* Read XML value */ FNC_GetXMLClob(*xml_handle,&xmlClob); /* Use LOB FNC calls to read the XML CLOB and return it */ FNC_LobOpen(*xmlClob, &id, 0, 0); while( FNC_LobRead(id, buffer, 100000, &actlen) == 0 && !trunc_err) trunc_err = FNC_LobAppend(*return_clob, buffer, actlen, &actlen); FNC_LobClose(id); *indicator_returnLob = 0; } }