Pro*C 中 SELECT 数据到数组中注意数组定义的大小

3883阅读 0评论2012-01-04 TOMSYAN
分类:Oracle


SQL> SELECT DEPTNO,ENAME,SAL
  2  FROM EMP ORDER BY DEPTNO;
    DEPTNO ENAME             SAL
---------- ---------- ----------
        10 CLARK            2450
        10 KING             5000
        10 MILLER           1300
        20 JONES            2975
        20 FORD             3000
        20 ADAMS            1100
        20 SMITH             800
        20 SCOTT            3000
        30 WARD             1250
        30 TURNER           1500
        30 ALLEN            1600
        30 JAMES             950
        30 BLAKE            2850
        30 MARTIN           1250
已选择14行。

PRO*C代码如下:
 
#include
#include
EXEC SQL INCLUDE SQLCA;

int main(void)
{
  EXEC SQL BEGIN DECLARE SECTION;
     char *db="";
     char ename[5][50]; //5条记录
     double salary[5];
     int deptno;
     int rows;
     int i;
  EXEC SQL END   DECLARE SECTION;
  EXEC SQL CONNECT :db;
  printf("Connected oracle as user:%s\n",db);
  printf("Please input deptno :\n");
  scanf("%d",&deptno);
  printf("%d\n",deptno);
  EXEC SQL SELECT ENAME,SAL INTO :ename,:salary FROM EMP WHERE deptno=:deptno;
  printf("sqlcode=%d,sqlmsg=%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
  rows=sqlca.sqlerrd[2];
  for(i=0;i    printf("%s,%f\n",ename[i],salary[i]);
  EXEC SQL COMMIT WORK RELEASE;
  return 0;
}
 
另存为test.pc
 
以下是记录数不同的表现行为,定义的数组只能存储5条记录。
/home/cpicsrv/yansp > gcc $ORACLE_HOME/lib/libclntsh.so test.c -o test
test.c:412:2: warning: no newline at end of file
/home/cpicsrv/yansp > ./test
Connected oracle as user:scott/tiger@10.223.18.116/yansp
Please input deptno :
10
10
sqlcode=1403,sqlmsg=ORA-01403: no data found
                                                    
CLARK                                            ,2450.000000
KING                                             ,5000.000000
MILLER                                           ,1300.000000
/home/cpicsrv/yansp > ./test
Connected oracle as user:scott/tiger@10.223.18.116/yansp
Please input deptno :
20
20
sqlcode=0,sqlmsg=
SMITH                                            ,800.000000
JONES                                            ,2975.000000
SCOTT                                            ,3000.000000
ADAMS                                            ,1100.000000
FORD                                             ,3000.000000
/home/cpicsrv/yansp > ./test
Connected oracle as user:scott/tiger@10.223.18.116/yansp
Please input deptno :
30
30
sqlcode=-2112,sqlmsg=SQL-02112: SELECT..INTO returns too many rows                        
ALLEN                                            ,1600.000000
WARD                                             ,1250.000000
MARTIN                                           ,1250.000000
BLAKE                                            ,2850.000000
TURNER                                           ,1500.000000
/home/cpicsrv/yansp >
上一篇:Pro*c 通过数组一次插入多条记录
下一篇:C语言常用系统函数--字符串函数