如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
3.Pro*C编程Oracle的Pro*C预编译器是一个可以让你在C语言源程序中嵌入SQL语句的编程工具。Pro*C预编译器在预编译过程中,将嵌入的SQL语句转换成对标准Oracle运行库的调用,从而生成预编译过的源代码,然后再进行通常的编译、连接后就可以运行了。OraclePro*c预编译器使我们可以在应用程序中使用强大灵活的SQL,通过这个接口,我们就可以用我们的C语言程序直接访问Oracle数据库。用Pro*c编程分为三步:(1)首先建立后缀名为.pc的内嵌SQL语句的C源程序文件;$vistu.pc(2)对源程序stu.pc进行预编译,生成单纯的C源程序stu.c$procPARSE=NONEstu.pc(3)编译该C程序,并加入Oracle的客户端动态链接库,生成可执行文件stu$gcc–ostustu.c$ORACLE_HOME/lib/libclntsh.so以下是stu.pc的源程序,该程序的功能是根据用户输入的ID号,查询student表中学生的姓名和成绩。#include<stdio.h>EXECSQLINCLUDESQLCA;voidmain(){/*声明宿主变量*/EXECSQLBEGINDECLARESECTION;VARCHARusr[20],pass[20],serv[20];charname[8];intid,score;EXECSQLENDDECLARESECTION;/*设置连接数据库的用户名、密码和数据库服务名*/strcpy(usr.arr,"test");usr.len=(unsignedshort)strlen((char*)usr.arr);strcpy(pass.arr,"test");pass.len=(unsignedshort)strlen((char*)pass.arr);strcpy(serv.arr,"MyDB");serv.len=(unsignedshort)strlen((char*)serv.arr);/*以test用户连接数据库*/EXECSQLCONNECT:usrIDENTIFIEDBY:passUSING:serv;printf("Connect!\n");/*用户输入欲查询的ID号*/printf("请输入学生代码:");scanf("%d",&id);/*执行动态的SQL查询语句*/EXECSQLSELECTid,name,scoreinto:id,:name,:scorefromstudentwhereid=:id;printf("Name=%sScore=%d\n",name,score);/*提交事务并断开与数据库的连接*/EXECSQLCOMMITWORKRELEASE;printf("Disconnect!\n");}在Pro*C中遍历数据表中每一条记录的方法是通过声明游标来实现的,下面的例程stu2.pc便是一个使用游标的例子,其功能是显示student表中的每一条记录。#include<stdio.h>EXECSQLINCLUDESQLCA;voidmain(){/*声明宿主变量*/EXECSQLBEGINDECLARESECTION;VARCHARusr[20],pass[20],serv[20];charname[8];intid,score;EXECSQLENDDECLARESECTION;/*设置连接数据库的用户名、密码和数据库服务名*/strcpy(usr.arr,"test");usr.len=(unsignedshort)strlen((char*)usr.arr);strcpy(pass.arr,"test");pass.len=(unsignedshort)strlen((char*)pass.arr);strcpy(serv.arr,"MyDB");serv.len=(unsignedshort)strlen((char*)serv.arr);/*以test用户连接数据库*/EXECSQLCONNECT:usrIDENTIFIEDBY:passUSING:serv;printf("Connect!\n");/*声明游标*/EXECSQLDECLAREstu_cursorCURSORFORSELECTid,name,scorefromstudent;printf("DECLARECURSOROK!\n");/*打开游标*/EXECSQLOPENstu_cursor;printf("OPENCURSOROK!\n");/*错误处理*/EXECSQLWHENEVERNOTFOUNDDObreak;/*循环访问游标数据*/while(1){EXECSQLFETCHstu_cursorIN