Program Listing
//Create Statement
const WCHAR wszUDFCreateStmt[]=
L"REPLACE FUNCTION udf01(INTEGER) \
RETURNS INTEGER \
LANGUAGE C \
NO SQL \
PARAMETER STYLE SQL \
EXTERNAL NAME \
'SS!udf01!/tmp/udf01.c'"; //file must reside on server node
//Delete Statement
const WCHAR wszUDFDeleteStmt[] = L"DROP FUNCTION udf01; ";
//Rename Statement
const WCHAR wszUDFRenameStmt[] = L"RENAME function udf01 to udf0001; ";
void UDFOperations (ICommand *pICommand)
{
ICommandText *pICommandText = 0;
HRESULT hResult = S_OK;
//creating Command Text
pICommand->QueryInterface(IID_ICommandText, (void **)&pICommandText);
//--------------
// Going to CREATE the UDF
hResult = m_pICommandText->SetCommandText(DBGUID_DEFAULT, UDFCreateStmt);
if (hResult != S_OK)
goto CLEANUP;
hResult = m_pICommand->Execute(NULL, IID_NULL, NULL, &cRowsAffected, NULL);
if (hResult != S_OK)
goto CLEANUP;
//--------------
//--------------
// Going to RENAME the UDF
hResult = m_pICommandText->SetCommandText(DBGUID_DEFAULT, UDFRenameStmt);
if (hResult != S_OK)
goto CLEANUP;
hResult = m_pICommand->Execute(NULL, IID_NULL, NULL, &cRowsAffected, NULL);
if (hResult != S_OK)
goto CLEANUP;
//--------------
//--------------
// Going to DELETE the UDF
hResult = m_pICommandText->SetCommandText(DBGUID_DEFAULT, UDFDeleteStmt);
if (hResult != S_OK)
goto CLEANUP;
hResult = m_pICommand->Execute(NULL, IID_NULL, NULL, &cRowsAffected, NULL);
if (hResult != S_OK)
goto CLEANUP;
//--------------
CLEANUP:
//---------------------------------------------------------
// See Chapter 4 for more details about Error Messages
//---------------------------------------------------------
if (pICommandText)
pICommandText->Release();
}