Welcome 微信登录

首页 / 数据库 / MySQL / Oracle教程:使用非滚动游标

源码:xx.pc
  1. /* 
  2.     功能:演示了Oracle非滚动游标操作 
  3.  
  4.     定义游标时注意事项: 
  5.     1. DECLARE CURSOR语句必须是使用游标的第一条语句 
  6.     2. 游标名称是一个标识符,而不是宿主变量,其长度是可以任意的,但只有前31个字符有效 
  7.     3. 游标所对应的SELECT语句不能包含INTO子句 
  8.     4. 游标语句(DECLARE,OPEN,FETCH,CLOSE)必须在同一个预编译单元内 
  9. */  
  10. #include <stdio.h>   
  11. #include <string.h>   
  12. #include <stdlib.h>   
  13.   
  14. #include <sqlca.h>   
  15. #pragma comment(lib, "orasql10.lib")   
  16.   
  17. int connect();  
  18. void cursor();  
  19. void sql_error();  
  20.   
  21. void main()  
  22. {  
  23.     EXEC SQL WHENEVER SQLERROR DO sql_error();  // 安装错误处理句柄   
  24.     if(connect() == 0)  
  25.     {  
  26.         cursor();  
  27.         EXEC SQL COMMIT RELEASE;  
  28.     }  
  29.     else  
  30.         printf("连接失败 ");  
  31. }  
  32.   
  33. int connect()                   // connect to oracle database   
  34. {  
  35.     char username[10], password[10], server[10];  
  36.   
  37.     strcpy(username, "scott");  
  38.     strcpy(password, "zzb888888");  
  39.     strcpy(server, "orcl");  
  40.   
  41.     EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;  
  42.   
  43.     if(sqlca.sqlcode == 0)  
  44.         return 0;  
  45.     else  
  46.         return sqlca.sqlcode;  
  47. }  
  48.   
  49. void sql_error()                // print error infomation   
  50. {  
  51.     printf("%.*s ", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);  
  52. }  
  53.   
  54. void cursor()                   // 游标操作   
  55. {  
  56.     int dno, eno;               // 定义宿主变量   
  57.     char name[10];  
  58.     float salary;  
  59.   
  60.     printf("输入部门号:");  
  61.     scanf("%d", &dno);  
  62.   
  63.     EXEC SQL DECLARE emp_cursor CURSOR FOR Select empno, ename, sal from emp where deptno=:dno; // 定义游标   
  64.     EXEC SQL OPEN emp_cursor;   // 打开游标   
  65.     EXEC SQL WHENEVER NOT FOUND DO break;   // 游标数据提取完毕后退出循环   
  66.     for(; ;)  
  67.     {  
  68.         EXEC SQL FETCH emp_cursor into :eno, :name, :salary;    // 循环提取数据   
  69.         printf("name = %s(%d), salary = %.2f ", name, strlen(name), salary);  
  70.     }  
  71.     EXEC SQL CLOSE emp_cursor;  // 关闭游标   
  72.   
  73.     printf("sqlca.sqlerrd[2] = %d ", sqlca.sqlerrd[2]);        // sqlca.sqlerrd[2]存放着Select语句作用的行数   
  74. }  
运行结果:输入部门号:20
name = SMITH    (9), salary = 800.00
name = JONES    (9), salary = 2975.00
name = SCOTT    (9), salary = 3000.00
name = ADAMS    (9), salary = 1100.00
name = FORD     (9), salary = 3000.00
sqlca.sqlerrd[2] = 5Oracle教程:使用滚动游标PL/SQL Developer 登陆分组管理 以及 保存用户名密码相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数