资源描述:
《proc 编程学习》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、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进行预编译,生成
2、单纯的C源程序stu.c$procPARSE=NONEstu.pc(3)编译该C程序,并加入Oracle的客户端动态链接库,生成可执行文件stu$gcc–ostustu.c$ORACLE_HOME/lib/libclntsh.so以下是stu.pc的源程序,该程序的功能是根据用户输入的ID号,查询student表中学生的姓名和成绩。 #includeEXECSQLINCLUDESQLCA;voidmain(){ /*声明宿主变量*/ EXECSQLBEGINDECLARESECTION; VARCHARusr[20],pass[
3、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=(unsig
4、nedshort)strlen((char*)serv.arr); /*以test用户连接数据库*/ EXECSQLCONNECT:usrIDENTIFIEDBY:passUSING:serv; printf("Connect!"); /*用户输入欲查询的ID号*/ printf("请输入学生代码:"); scanf("%d",&id); /*执行动态的SQL查询语句*/ EXECSQLSELECTid,name,scoreinto:id, :name,:scorefromstudentwhereid=:id; printf("Name=%s
5、 Score=%d",name,score); /*提交事务并断开与数据库的连接*/EXECSQLCOMMITWORKRELEASE; printf("Disconnect!");} 在Pro*C中遍历数据表中每一条记录的方法是通过声明游标来实现的,下面的例程stu2.pc便是一个使用游标的例子,其功能是显示student表中的每一条记录。 #includeEXECSQLINCLUDESQLCA;voidmain(){ /*声明宿主变量*/ EXECSQLBEGINDECLARESECTION; VARCHARusr
6、[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.
7、len=(unsignedshort)strlen((char*)serv.arr); /*以test用户连接数据库*/ EXECSQLCONNECT:usrIDENTIFIEDBY:passUSING:serv; printf("Connect!"); /*声明游标*/ EXECSQLDECLAREstu_cursorCURSORFOR SELECTid,name,scorefromstudent; printf("DECLARECURSOROK!"); /*打开游标*/ EXECSQLOPEN stu_cursor; printf("O
8、PENCURSOROK!"); /*错误处理*/ EXECSQLWHENEVERNOTFOUNDDObreak; /*