Proc *C/C++入门--数组变量
来源:互联网 发布:c语言 登录系统 编辑:程序博客网 时间:2024/05/29 14:35
在Pro*C/C++中也支持数组,可以在宿主变量区域声明一个或者多个数组,但是Pro*C/C++对数组有如下要求:
- Pro*C只支持一维数组
- Pro*C不支持数组指针,对于字符串数组采用二维数组的形式,但Proc*C只是把二维数组当作一维数组处理,数组中的每个元素都是一个字符串(字符数组)
- Pro*C所支持数组最大长度是32767,超出此限制将报错
- 在SQL语句中使用数组变量,只需给出:和变量名称,不要给下标。
示例:
EXEC SQL BEGIN DECLARE SECTION int A[100]; char B[100]; char C[100][15];EXEC SQL END DECLARE SECTION
错误例子
for(int i = 0;i < 100; i ++){ EXEC SQL SELECT number,name INTO :emp_number[i], :emp_name[i];}
- Pro*C/C++利用select语句查询数据库并对比varchar类型和char类型的区别:
- 当数组作为输入的时候,两者没有什么区别;
- 当作为输出的时候:
- 对于char类型的数组,Oracle预编译的时候知道了数组长度,结果数据不够填满数组的时候,后面自动填充空格,需要用户手动处理
- 对于varchar类型的数组,是变长数据类型,所以Oracle会自动填充合适的数组,最后用’\0’结束,不会多出很多空格,推荐使用varchar类型。
#include <stdio.h>#include <string.h>#include <stdlib.h>#include "sqlca.h"void sqlerr();//先定义宿主变量 (SQL变量)EXEC SQL BEGIN DECLARE SECTION ;char * serverid = "scott/tiger@orcl";int deptno[100];char dname[100][20];char loc[100][20];int count;int deptno2[100];varchar dname2[100][20]; //varchar类型 和 char 类型的区别. 与编译选项有关系varchar loc2[100][20];EXEC SQL END DECLARE SECTION ;int main(){ int ret = 0, i = 0; EXEC SQL WHENEVER SQLERROR DO sqlerr(); EXEC SQL connect :serverid; EXEC SQL WHENEVER NOT FOUND CONTINUE; EXEC SQL select deptno, dname, loc into :deptno, :dname,:loc from dept; count= sqlca.sqlerrd[2]; printf("count:%d\n", count); for (i=0; i<count; i++) { printf("%d, %s, %s\n", deptno[i], dname[i], loc[i]); } printf("通过varchar获取数据\n"); EXEC SQL select deptno, dname, loc into :deptno2, :dname2,:loc2 from dept; count= sqlca.sqlerrd[2]; printf("count:%d\n", count); for (i=0; i<count; i++) { printf("%d, %s, %s\n", deptno2[i], dname2[i].arr, loc2[i].arr); } EXEC SQL COMMIT RELEASE; //提交事务断开连接 return ret; }//出错原因void sqlerr(){ EXEC SQL WHENEVER SQLERROR CONTINUE; // 下一步 printf("err reason:%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc); //printf("err reason:%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK WORK RELEASE;// exit(1);}
- Makefile
.PHONY:clean allall:arrayarray:array.pc proc "$@.pc" gcc -g "$@.c" -o $@ -I${ORACLE_HOME}/precomp/public -L${ORACLE_HOME}/lib -lclntshclean: rm array
oracle@lzj:~$ ./array count:650, 20name , 中国 10, ACCOUNTING , NEW YORK 20, RESEARCH , DALLAS 30, SALES , CHICAGO 40, OPERATIONS , BOSTON 61, 中国2 , 中国 通过varchar获取数据count:650, 20name, 中国10, ACCOUNTING, NEW YORK20, RESEARCH, DALLAS30, SALES, CHICAGO40, OPERATIONS, BOSTON61, 中国2, 中国
0 0
- Proc *C/C++入门--数组变量
- Proc *C/C++入门之指示器变量
- proc*c 程序设计(二) 指示变量
- Proc *C/C++入门之通讯区
- Proc *C/C++入门之动态SQL
- C语言入门之多维数组的指针变量
- Proc *C/C++入门--C/C++操作Oracle数据库
- c++:变量,数组和指针
- Proc *C/C++入门之游标访问数据库
- Proc *C/C++入门之常用嵌入式SQL语句
- linux c读取proc
- kernel/proc.c
- kernel/proc.c
- linux c shell proc
- PROC*C编程基础
- proc/c++(二)
- proc/c++(三)
- C#入门(4)数组
- 每天一个linux命令(48):watch命令
- caffe的python接口学习(10):微调 & 直接训练
- FTC起诉D-Link销售不安全的路由器和摄像头
- css调整表格在屏幕上的位置
- android 获取系统底层信息
- Proc *C/C++入门--数组变量
- js有限状态机javascript-state-machine
- spring boot 入门荔枝
- 某些3D游戏优化小技巧汇总
- 数据库同步,配置两个数据源(mysql)
- C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母
- Java学习笔记之数据类型
- HP集群配置过程-详细实例
- java中的json解析