#include <iostream>
using namespace std;
#include "sqlca.h"EXEC SQL BEGIN DECLARE SECTION;
char *uid="system/oracle@swdb";
char username[10][21];
int id[10];
int v_id;
int cnt;
EXEC SQL END DECLARE SECTION;void sqlerr()
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
cout << sqlca.sqlerrm.sqlerrmc<<endl;
EXEC SQL ROLLBACK WORK RELEASE;
exit(1);
}

int main()
{
EXEC SQL WHENEVER SQLERROR DO sqlerr();
EXEC SQL CONNECT :uid;
EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT ID,USERNAME
FROM BAMBOO WHERE USERNAME IS NULL;
EXEC SQL OPEN emp_cursor;
EXEC SQL WHENEVER NOT FOUND CONTINUE;
while(true)
{
EXEC SQL FETCH emp_cursor INTO :id,:username;
if(sqlca.sqlerrd[2]==0){
break;
}
cnt=(sqlca.sqlerrd[2]%10==0)?10:sqlca.sqlerrd[2]%10;
for(int i=0;i<cnt;i++){
cout<<id[i]<<username[i]<<endl;
}
if(cnt!=10){
break;
}
}
EXEC SQL CLOSE emp_cursor;
EXEC SQL COMMIT WORK RELEASE;
return 0;
} desc bamboo;
ID    USERNAME
1     bamboo
2     bamboo
3            
问能否用cursor查到包括id=3的那行(用整体查,不是单个USERNAME IS NULL)

解决方案 »

  1.   

    当然可以的!如果你那个行的USERNAME NULL 的话!
      

  2.   

    请问能写个大概吗?一个cursor把全部数据都取出来,包括空的那行
      

  3.   

    我看oracle文档只有在sql中好像提到,在cursor下没提到
      

  4.   

    DECLARE emp_cursor CURSOR FOR SELECT ID,USERNAME 
    FROM BAMBOO WHERE USERNAME IS NULL; 
    DECLARE emp_cursor CURSOR FOR SELECT ID,USERNAME 
    FROM BAMBOO ;
      

  5.   

    这只能查到id=1 id=2的,查不了id=3的那一行,我要全部查出来
      

  6.   

    #6的
    DECLARE emp_cursor CURSOR FOR SELECT ID,USERNAME 
    FROM BAMBOO ;
    不可以查出来吗?
      

  7.   

    那很奇怪了这样的sql在正常情况下是可以的,这是pro*c?是否是因为赋值问题?该记录应该查出来的,没理由同样的sql在不同的环境下表现不一样了实验下只查id的情况
      

  8.   

    那很奇怪了这样的sql在正常情况下是可以的,这是pro*c?是否是因为赋值问题?该记录应该查出来的,没理由同样的sql在不同的环境下表现不一样了实验下只查id的情况
      

  9.   

    怀疑数据有问题,你那个不是null,而是空字符串
    EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT ID,USERNAME
    FROM BAMBOO WHERE USERNAME IS NULL or length(trim(USERNAME))=0;
      

  10.   

    因为用到了CURSOR所以不同,但我现在用指示器变量数组可以查出来,但感觉麻烦
      

  11.   

    SELECT ID,USERNAME,length(username)
    FROM BAMBOO --查看到底是为NULL,还是有空格?