我做了个程序,想用PROC的游标实现多行查询,不过一直出现问题请大家帮我看一下,感谢
void muladd()
{
EXEC SQL BEGIN DECLARE SECTION;
char author_code[8], name[10];
float salary;
short salary_ind;
EXEC SQL END DECLARE SECTION;
printf("\n输入作家代码: ");
gets(author_code); /*为主变量赋值*/
EXEC SQL DECLARE SX CURSOR FOR
SELECT name, salary
FROM auths
WHERE author_code = :author_code
FOR UPDATE OF salary;
EXEC SQL OPEN SX while(1)
{
EXEC SQL FETCH SX INTO :name,:salary;/*游标指针向前推进一行,然后从结果集中取当前行,送响应主变量*/
if(sqlca.sqlcode<>SUCCESS)
break;
printf("%s,%s,%f",author_code,name,salary);
}
EXEC SQL CLOSE SX; }
void muladd()
{
EXEC SQL BEGIN DECLARE SECTION;
char author_code[8], name[10];
float salary;
short salary_ind;
EXEC SQL END DECLARE SECTION;
printf("\n输入作家代码: ");
gets(author_code); /*为主变量赋值*/
EXEC SQL DECLARE SX CURSOR FOR
SELECT name, salary
FROM auths
WHERE author_code = :author_code
FOR UPDATE OF salary;
EXEC SQL OPEN SX while(1)
{
EXEC SQL FETCH SX INTO :name,:salary;/*游标指针向前推进一行,然后从结果集中取当前行,送响应主变量*/
if(sqlca.sqlcode<>SUCCESS)
break;
printf("%s,%s,%f",author_code,name,salary);
}
EXEC SQL CLOSE SX; }
{
EXEC SQL BEGIN DECLARE SECTION; char author_code[20];
char name[20];
float salary;
EXEC SQL END DECLARE SECTION;
printf("输入作者号\n");
gets(author_code);
EXEC SQL INCLUDE sqlca;
EXEC SQL DECLARE SX CURSOR FOR SELECT author_code,name,salary
FROM author
WHERE author_code=:author_code;
EXEC SQL OPEN SX; printf("\n作家代码\t作家姓名\t作家工资\n");
printf("--------\t--------\t--------\n");
for(;;)
{
EXEC SQL WHENEVER NOT FOUND DO break;
EXEC SQL FETCH SX INTO:author_code,:name,:salary;
printf("%8s\t%8s\t%8.2f\n",author_code,name,salary);
}
EXEC SQL CLOSE SX;
printf("Have a good day!"); }
现在我用这个程序,读出来的数据就停不下来,可能是游标读的数目出错,而且
code,name,salary,只有code读的正确,后面两个是乱码。
if(sqlca.sqlcode<>SUCCESS)
break;却报错:syntax error : '>'
C里面应该是"!=",
把"<>"替换成"!=",试试看
这两者是什么类型的,根据相应的类型来比较吧
您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
http://www.bestdba.cn/match_discussion.aspx在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
一方面,他们会为您的问题提供满意的答案,
另一方面,也邀请您为他们投上宝贵的选票。2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
中抽取3名幸运者,赠送由IBM提供的精美礼品一份!此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。您的帖子位于:
http://www.bestdba.cn/match_discussion3.aspx?pointid=230&pointid2=1&pointid3=5&pcount=stc非常感谢您对本次活动的支持!
--------------------------------------------------------------
注册日期: Jul,2006
发贴数: 1 应该是没有错误的, 只不过,如果仅仅为了printf就别for update勒。
----------------------- EXEC SQL DECLARE SX CURSOR FOR
SELECT name, salary
FROM auths
WHERE author_code = :author_code
FOR UPDATE OF salary;
EXEC SQL OPEN SX while(1)
{
EXEC SQL FETCH SX INTO :name,:salary;/*游标指针向前推进一行,然后从结果集中取当前行,送响应主变量*/ if(sqlca.sqlcode<>SUCCESS)
break;
printf("%s,%s,%f",author_code,name,salary);
}
EXEC SQL CLOSE SX;