The following example extracts the "Interests" section from the Resume CLOB column of the EMP_RESUME table. Only the substring is transferred to the application.
/* From CLI sample lookres.c */
/* ... */
SQLCHAR * stmt2 = "SELECT resume FROM emp_resume "
"WHERE empno = ? AND resume_format = 'ascii'" ;
/* ... */
/* Get CLOB locator to selected Resume */
rc = SQLBindParameter( hstmt,
1,
SQL_PARAM_OUTPUT,
emp_no.type,
SQL_CHAR,
emp_no.length,
0,
emp_no.s,
emp_no.length,
&emp_no.ind
) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
printf( "\n>Enter an employee number:\n" ) ;
gets( ( char * ) emp_no.s ) ;
rc = SQLExecDirect( hstmt, stmt2, SQL_NTS ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
rc = SQLBindCol( hstmt,
1,
SQL_C_CLOB_LOCATOR,
&ClobLoc1,
0,
&pcbValue
) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
rc = SQLFetch( hstmt ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
/*
Search CLOB locator to find "Interests"
Get substring of resume ( from position of interests to end )
*/
rc = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &lhstmt ) ;
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc ) ;
/* Get total length */
rc = SQLGetLength( lhstmt,
SQL_C_CLOB_LOCATOR,
ClobLoc1,
&SLength,
&Ind ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, lhstmt, rc ) ;
/* Get Starting postion */
rc = SQLGetPosition( lhstmt,
SQL_C_CLOB_LOCATOR,
ClobLoc1,
0,
( SQLCHAR * ) "Interests",
9,
1,
&Pos1,
&Ind
) ;
CHECK_HANDLE( SQL_HANDLE_STMT, lhstmt, rc ) ;
rc = SQLFreeStmt( lhstmt, SQL_CLOSE ) ;
CHECK_HANDLE( SQL_HANDLE_STMT, lhstmt, rc ) ;
buffer = ( SQLCHAR * ) malloc( SLength - Pos1 + 1 ) ;
/* Get just the "Interests" section of the Resume CLOB */
/* ( From Pos1 to end of CLOB ) */
rc = SQLGetSubString( lhstmt,
SQL_C_CLOB_LOCATOR,
ClobLoc1,
Pos1,
SLength - Pos1,
SQL_C_CHAR,
buffer,
SLength - Pos1 + 1,
&OutLength,
&Ind
) ;
CHECK_HANDLE( SQL_HANDLE_STMT, lhstmt, rc ) ;
/* Print Interest section of Employee's resume */
printf( "\nEmployee #: %s\n %s\n", emp_no.s, buffer ) ;