Pro*C中滚动游标的使用

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>
void connect();
void sql_err();void cursor();
void main()
{
EXEC SQL WHENEVER SQLERROR DO sql_err();
connect();
cursor();
EXEC SQL COMMIT RELEASE;
}

void sql_err()
{
printf("%.*s\n",sqlca.sqlerrm.sqlerrml,,sqlca.sqlerrm.sqlerrmc);
}

void connect()/*数据库连接-本地数据库,不添加server*/
{
EXEC SQL BEGIN DECLARE SECTION;
char username[20],password[20];
EXEC SQL END DECLARE SECTION;
printf("input username: ");
gets(username);
printf("input password: ");
gets(password);
EXEC SQL CONNECT :username IDENTIFIED BY :password;
}

void cursor()/*游标的标准使用方式,声明,打开,抓取,关闭*/
{

{

EXEC SQL BEGIN DECLARE SECTION;
int eno;
char name[20];
float salary;
char action;
EXEC SQL END DECLARE SECTION;
EXEC SQL DECLARE emp_cursor SCROLL CURSOR FOR
SELECT empno,ename,sal FROM emp ;
EXEC SQL OPEN emp_cursor;
EXEC SQL WHENEVER NOT FOUND DO sql_err();
for(;;)
{
printf("F:first,P:prior,C:current,L:last, ");
printf("N:next row,X:exit the app: ");
scanf("%c",&action);
getchar();
switch(action)
{
case 'f':
case 'F':
EXEC SQL FETCH FIRST emp_cursor INTO :eno,:name,:salary;
break;
case 'n':
case 'N':
EXEC SQL FETCH NEXT emp_cursor INTO :eno,:name,:salary;
break;
case 'p':
case 'P':
EXEC SQL FETCH PRIOR emp_cursor INTO :eno,:name,:salary;
break;
case 'L':
case 'l':

EXEC SQL FETCH LAST emp_cursor INTO :eno,:name,:salary;
break;
case 'c':
case 'C':
EXEC SQL FETCH CURRENT emp_cursor INTO :eno,:name,:salary;
break;
case 'x':
case 'X':
EXEC SQL CLOSE emp_cursor;
return;
}
printf("\n empno: %d,name: %s,salary:%4.0f\n",eno,name,salary);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值