[Oracle]使用非滚动游标
源码: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]使用非滚动游标相关推荐
- [Oracle]使用滚动游标
源代码:xx.pc /* 功能:演示了Oracle滚动游标操作 定义游标时注意事项: 1. DECLARE CURSOR语句必须是使用游标的第一条语句 2. 游标名称是一个标识符,而不是宿主变量,其长 ...
- [Pro*c]滚动游标变量的使用
代码:xx.pc /* 功能:演示了Oracle滚动游标变量的使用定义游标时注意事项: 1. DECLARE CURSOR语句必须是使用游标的第一条语句 2. 游标名称是一个标识符,而不是宿主变量,其 ...
- Pro*c使用滚动游标进行更新或删除游标行
代码:xx.pc /* 功能:演示了Oracle滚动游标进行更新(或删除)操作 定义游标时注意事项: 1. DECLARE CURSOR语句必须是使用游标的第一条语句 2. 游标名称是一个标识符,而不 ...
- oracle中判断空,Oracle中判断空游标的方法
1.声明包 create or replace package TAL_TEST is -- Author : ADMINISTRATOR -- Created : 2012/12/9 15:15:3 ...
- oracle11 rman全备,Oracle 11g非归档模式下mount状态RMAN究竟能不能进行全备?
Oracle 11g非归档模式下mount状态RMAN究竟能不能进行全备? 网上很多博客说可以备份,但是我做出的实验都是失败的,请教大家究竟Oracle 11g非归档模式下mount状态RMAN究竟能 ...
- 【Oracle】Cursor(游标)
[Oracle]Cursor(游标) Cursour(游标)是Oracle数据库中解析SQL和执行SQL的载体. Shared Cursor 定义 Shared Cursor 是指缓存在库缓存里 SQ ...
- ORA-28500:连接ORACLE到非Oracle系统时返回此信息:XXXXXXXXX... ORA-02063:紧接着2 lines (起自DG4
@[TOC](ORA-28500:连接ORACLE到非Oracle系统时返回此信息:[Microsoft][ODBC驱动程序管理器]无效的参数值{HY009}ORA-02063:紧接着2 lines ...
- ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息(对象名 ‘RECOVER.HS_TRANSACTION_LOG‘ 无效,ERROR ORA-02054: 未决事务处理)
今天在存储过程中通过dblink的方式从oracle中往sql server中的表插入数据时,报如下的错误: ERROR ORA-02054: 未决事务处理 15.29.1031 ORA-28500: ...
- oracle存储过程详解--游标 实现增、删、改、查的
注:以下是转来的内容,但是设计PLSQL代码,原文有问题,所以PLSQL代码我都验证修改了.测试需要在scott/tiger下进行,对于没有的表,需要自行创建,表复制的语句为 CREATE TABLE ...
最新文章
- Kubernetes1.5源码分析(二) apiServer之资源注册
- python画笑脸-如何用Python画滑稽笑脸
- 视频直播技术详解(5)延迟优化
- spring框架所有包解释
- Oracle 中使用 fetch bulk collect into 批量效率的读取
- 浅谈html的语义化和一些简单优化,html标签语义化
- 精度76.16%,速度是SlowFast的4.5倍,视频理解模型PP-TSM重磅发布
- ORACLE表空间使用量查询SQL
- SSH访问远程主机超时问题解决
- c语言的基本案例猴子,[转载]猴子选大王问题(C语言实现)
- ubuntu 彻底卸载软件
- Flutter最佳入门方式——写一个计算器
- 用c语言实现下载文件
- Unity3D - 高动态范围(Hight Dynamic Range - HDR)
- 计算机键盘指示灯不亮也不启动不了,终于明白电脑开机黑屏鼠标键盘灯不亮
- 炮兵阵地图文详解NOI2001/POJ1185(状态压缩)
- 使用aspose.words将Word转为PDF
- 【Linux 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct 结构体成员分析 | shared 成员 | anon_vma_chain 成员 | anon_vma 成员 )
- 【Spring】IoC容器系列的设计与实现:BeanFactory和ApplicationContext
- 苹果和android充电线一根,非常实用!一根充电线,同时搞定苹果、安卓、Type-c,出门带它就够了...
热门文章
- 每个Power BI开发人员的Power Query提示
- mysql springboot 缓存_Spring Boot 整合 Redis 实现缓存操作
- leetcode 494. 目标和
- leetcode 1584. 连接所有点的最小费用(并查集)
- 测试无服务器应用程序的最佳方法
- 数据结构两个月学完_这是我作为数据科学家两年来所学到的
- Mac通过wifi连接 Android设备
- [EOJ439] 强制在线
- 团队项目(NABC分析)
- warning: format not a string literal and no format arguments