次の関数は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;
}
}