源码:xx.pc

/*
功能:演示了Oracle非滚动游标操作
定义游标时注意事项:
1. DECLARE CURSOR语句必须是使用游标的第一条语句
2. 游标名称是一个标识符,而不是宿主变量,其长度是可以任意的,但只有前31个字符有效
3. 游标所对应的SELECT语句不能包含INTO子句
4. 游标语句(DECLARE,OPEN,FETCH,CLOSE)必须在同一个预编译单元内
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>
#pragma comment(lib, "orasql10.lib")
int connect();
void cursor();
void sql_error();
void main()
{
EXEC SQL WHENEVER SQLERROR DO sql_error();  // 安装错误处理句柄
if(connect() == 0)
{
cursor();
EXEC SQL COMMIT RELEASE;
}
else
printf("连接失败\n");
}
int connect()                   // connect to oracle database
{
char username[10], password[10], server[10];
strcpy(username, "scott");
strcpy(password, "zzb888888");
strcpy(server, "orcl");
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
if(sqlca.sqlcode == 0)
return 0;
else
return sqlca.sqlcode;
}
void sql_error()                // print error infomation
{
printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
}
void cursor()                   // 游标操作
{
int dno, eno;               // 定义宿主变量
char name[10];
float salary;
printf("输入部门号:");
scanf("%d", &dno);
EXEC SQL DECLARE emp_cursor CURSOR FOR Select empno, ename, sal from emp where deptno=:dno;    // 定义游标
EXEC SQL OPEN emp_cursor;   // 打开游标
EXEC SQL WHENEVER NOT FOUND DO break;   // 游标数据提取完毕后退出循环
for(; ;)
{
EXEC SQL FETCH emp_cursor into :eno, :name, :salary;    // 循环提取数据
printf("name = %s(%d), salary = %.2f\n", name, strlen(name), salary);
}
EXEC SQL CLOSE emp_cursor;  // 关闭游标
printf("sqlca.sqlerrd[2] = %d\n", sqlca.sqlerrd[2]);     // sqlca.sqlerrd[2]存放着Select语句作用的行数
}

运行结果:

输入部门号: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] = 5

[Oracle]使用非滚动游标相关推荐

  1. [Oracle]使用滚动游标

    源代码:xx.pc /* 功能:演示了Oracle滚动游标操作 定义游标时注意事项: 1. DECLARE CURSOR语句必须是使用游标的第一条语句 2. 游标名称是一个标识符,而不是宿主变量,其长 ...

  2. [Pro*c]滚动游标变量的使用

    代码:xx.pc /* 功能:演示了Oracle滚动游标变量的使用定义游标时注意事项: 1. DECLARE CURSOR语句必须是使用游标的第一条语句 2. 游标名称是一个标识符,而不是宿主变量,其 ...

  3. Pro*c使用滚动游标进行更新或删除游标行

    代码:xx.pc /* 功能:演示了Oracle滚动游标进行更新(或删除)操作 定义游标时注意事项: 1. DECLARE CURSOR语句必须是使用游标的第一条语句 2. 游标名称是一个标识符,而不 ...

  4. oracle中判断空,Oracle中判断空游标的方法

    1.声明包 create or replace package TAL_TEST is -- Author : ADMINISTRATOR -- Created : 2012/12/9 15:15:3 ...

  5. oracle11 rman全备,Oracle 11g非归档模式下mount状态RMAN究竟能不能进行全备?

    Oracle 11g非归档模式下mount状态RMAN究竟能不能进行全备? 网上很多博客说可以备份,但是我做出的实验都是失败的,请教大家究竟Oracle 11g非归档模式下mount状态RMAN究竟能 ...

  6. 【Oracle】Cursor(游标)

    [Oracle]Cursor(游标) Cursour(游标)是Oracle数据库中解析SQL和执行SQL的载体. Shared Cursor 定义 Shared Cursor 是指缓存在库缓存里 SQ ...

  7. ORA-28500:连接ORACLE到非Oracle系统时返回此信息:XXXXXXXXX... ORA-02063:紧接着2 lines (起自DG4

    @[TOC](ORA-28500:连接ORACLE到非Oracle系统时返回此信息:[Microsoft][ODBC驱动程序管理器]无效的参数值{HY009}ORA-02063:紧接着2 lines ...

  8. ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息(对象名 ‘RECOVER.HS_TRANSACTION_LOG‘ 无效,ERROR ORA-02054: 未决事务处理)

    今天在存储过程中通过dblink的方式从oracle中往sql server中的表插入数据时,报如下的错误: ERROR ORA-02054: 未决事务处理 15.29.1031 ORA-28500: ...

  9. oracle存储过程详解--游标 实现增、删、改、查的

    注:以下是转来的内容,但是设计PLSQL代码,原文有问题,所以PLSQL代码我都验证修改了.测试需要在scott/tiger下进行,对于没有的表,需要自行创建,表复制的语句为 CREATE TABLE ...

最新文章

  1. Kubernetes1.5源码分析(二) apiServer之资源注册
  2. python画笑脸-如何用Python画滑稽笑脸
  3. 视频直播技术详解(5)延迟优化
  4. spring框架所有包解释
  5. Oracle 中使用 fetch bulk collect into 批量效率的读取
  6. 浅谈html的语义化和一些简单优化,html标签语义化
  7. 精度76.16%,速度是SlowFast的4.5倍,视频理解模型PP-TSM重磅发布
  8. ORACLE表空间使用量查询SQL
  9. SSH访问远程主机超时问题解决
  10. c语言的基本案例猴子,[转载]猴子选大王问题(C语言实现)
  11. ubuntu 彻底卸载软件
  12. Flutter最佳入门方式——写一个计算器
  13. 用c语言实现下载文件
  14. Unity3D - 高动态范围(Hight Dynamic Range - HDR)
  15. 计算机键盘指示灯不亮也不启动不了,终于明白电脑开机黑屏鼠标键盘灯不亮
  16. 炮兵阵地图文详解NOI2001/POJ1185(状态压缩)
  17. 使用aspose.words将Word转为PDF
  18. 【Linux 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct 结构体成员分析 | shared 成员 | anon_vma_chain 成员 | anon_vma 成员 )
  19. 【Spring】IoC容器系列的设计与实现:BeanFactory和ApplicationContext
  20. 苹果和android充电线一根,非常实用!一根充电线,同时搞定苹果、安卓、Type-c,出门带它就够了...

热门文章

  1. 每个Power BI开发人员的Power Query提示
  2. mysql springboot 缓存_Spring Boot 整合 Redis 实现缓存操作
  3. leetcode 494. 目标和
  4. leetcode 1584. 连接所有点的最小费用(并查集)
  5. 测试无服务器应用程序的最佳方法
  6. 数据结构两个月学完_这是我作为数据科学家两年来所学到的
  7. Mac通过wifi连接 Android设备
  8. [EOJ439] 强制在线
  9. 团队项目(NABC分析)
  10. warning: format not a string literal and no format arguments