次のプログラムでは、スクロール可能カーソルとFETCH文で使用される様々なオプションの使用方法を示します。
#include <stdio.h>
/* declare host variables */
char userid[12]="SCOTT/TIGER";
char emp_name[10];
void sql_error();
/* include the SQL Communications Area */
#include<sqlca.h>
main()
{
/* handle errors */
EXEC SQL WHENEVER SQLERROR do sql_error("Oracle error");
/* connect to Oracle */
EXEC SQL CONNECT :userid;
printf("Connected.\n");
/* declare a scrollable cursor */
EXEC SQL DECLARE emp_cursor SCROLL CURSOR FOR
SELECT ename FROM emp;
/* open the cursor and identify the active set */
EXEC SQL OPEN emp_cursor;
/* Fetch the last row */
EXEC SQL FETCH LAST emp_cursor INTO :emp_name;
/* Fetch row number 5 */
EXEC SQL FETCH ABSOLUTE 5 emp_cursor INTO :emp_name;
/* Fetch row number 10 */
EXEC SQL FETCH RELATIVE 5 emp_cursor INTO :emp_name;
/* Fetch row number 7 */
EXEC SQl FETCH RELATIVE -3 emp_cursor INTO :emp_name;
/* Fetch the first row */
EXEC SQL FETCH FIRST emp_cursor INTO :emp_name;
/* Fetch row number 2*/
EXEC SQL FETCH my_cursor INTO :emp_name;
/* Fetch row number 3 */
EXEC SQL FETCH NEXT my_cursor INTO :emp_name;
/* Fetch row number 3 */
EXEC SQL FETCH CURRENT my_cursor INTO :emp_name;
/* Fetch row number 2 */
EXEC SQL FETCH PRIOR my_cursor INTO :emp_name;
}
void
sql_error(msg)
char *msg;
{
char buf[500];
int buflen , msglen;
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK TRANSACTION;
buflen = sizeof (buf);
sqlglm(buf, &buflen, &mesglen);
printf("%s\n",msg);
printf("%*.s\n",msglen,buf);
exit(1);
}