ORACLE培训教程3__pro_c使用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ORACLE培训教程3_pro*c使用阿哲1/16Pro*C的使用一Pro*C程序概述:1.什么是Pro*C程序在ORACLE数据库管理和系统中,有三种访问数据库的方法;(1)用SQL*Plus,它有SQL命令以交互的应用程序访问数据库;(2)用第四代语言应用开发工具开发的应用程序访问数据库,这些工具有SQL*Froms,QL*Reportwriter,SQL*Menu等;(3)利用在第三代语言内嵌入的SQL语言或ORACLE库函数调用来访问。Pro*C就属于第三种开发工具之一,它把过程化语言C和非过程化语言SQL最完善地结合起来,具有完备的过程处理能力,又能完成任何数据库的处理品任务,使用户可以通过编程完成各种类型的报表。在Pro*C程序中可以嵌入SQL语言,利用这些SQL语言可以完成动态地建立、修改和删除数据库中的表,也可以查询、插入、修改和删除数据库表中的行,还可以实现事务的提交和回滚。在Pro*C程序中还可以嵌入PL/SQL块,以改进应用程序的性能,特别是在网络环境下,可以减少网络传输和处理的总开销。2.Pro*C的程序结构图通俗来说,Pro*C程序实际是内嵌有SQL语句或PL/SQL块的C程序,因此它的组成很类似C程序。但因为它内嵌有SQL语句或PL/SQL块,所以它还含有与之不同的成份。为了让大家对Pro*C有个感性的认识,特将二者差别比较如下:C的全程变量说明C源程序函数1:同函数K。函数2:同函数K。C的局部变量说明函数K可执行语句应用程序首部C的外部变量说明外部说明段(ORACLE变量说明)通讯区说明Pro*C源程序函数1:同函数K。函数2:同函数K。C局部变量说明程序体内部说明部分内部说明段通讯区说明ORACLE培训教程3_pro*c使用阿哲2/16函数KC的可执行语句可执行语句SQL的可执行语句或PL/SQL块二.Pro*C程序的组成结构每一个Pro*C程序都包括两部分:(1)应用程序首部;(2)应用程序体应用程序首部定义了ORACLE数据库的有关变量,为在C语言中操纵ORACLE数据库做好了准备。应用程序体基本上由Pro*C的SQL语句调用组成。主要指查询SELECT、INSERT、UPDATE、DELETE等语句。应用程序的组成结构如图所示:EXECSQLBEGINDECLARESECTION(SQL变量的定义)EXECSQLENDDECLARESECTION;EXECSQLINCLUDESQLLA;EXECSQLCONNECT:用户名IDENTIFIEDBY:口令SQL语句及游标的使用1.应用程序首部应用程序的首部就是Pro*C的开始部分。它包括以下三部分:C变量描述部分;SQL变量描述部分(DECLARE部分);SQL通信区。(1).DECLARE部分(描述部分)描述部分说明程序的SQL变量,定义部分以EXECSQLBEGINDECLARESECTION;开始和以EXECSQLENDDECLARESECTION;结束的。它可以出现在程序的主部,也可出现在局部SQL变量的说明和使用在说明段能为SQL变量指定的数据类型如表所示:数据类型描述CHARCHAR(n)INTSHORTLONGFLOATDOUBLEVARCHAR单字符n个字符数组整数短整数单精度浮点数双精度浮点数变长字符串这些数据类型实际上就是C语言的数据类型,其中VARCHAR中视为C数据类型的扩充。这在以后会谈到。描述部分SQL通信区应用程序体应用程序首部ORACLE培训教程3_pro*c使用阿哲3/16SQL变量的使用应注意以下几点:必须在描述部分明确定义必须使用与其定义相同的大小写格式在SQL语句中使用时,必须在其之前加一个“:”(冒号),但在C语句中引用时不需加冒号。不能是SQL命令中的保留字。可以带指示变量。例如:EXECSQLBEGINDECLARESECTIONS;VARCHARprograme[30];Intporgsal,pempno;EXECSQLENDDECLARESECTION;EXECSQLSELECTENAME,SALINTO:programe,:progsalFROMEMPWHEREEMPNO=:pempno;(2).指示器变量的说明和引用指示变量实际上也是一类SQL变量,它被用来管理与其相关联的宿主变量(即在SQL语句中充当输入或输出的变量)。每一个宿主变量都可定义一个指示器变量,主要用于处理空值(NULL)指示器变量的说明基本同一般SQL变量一样,但必须定义成2字节的整型,如SHORT、INT。在SQL语句中引用时,其前也应加“:”(冒号),而且必须附在其相关联的宿主变量之后,在C语句中,可独立使用。当指示器变量为-1时,表示空值。例如:EXECSQLBEGINDECLARESECTION;INTdept-number;SHORTind–num;CHARemp–name;EXECSQLENDDECLARESECTION;Scanf(“90d%s”,&dept-number,dept–name);If(dept–number==0)Ind–num=-1;ElseInd–num=0;EXECSQLINSERTINTODEPT(DEPTNO,DNAME)VALUES(:dept–number:ind-num,:dept–name);其中ind–num是dept–number的指示器变量。当输入的dept–number值是0时,则向DEPT表的DEPTNO列插入空值。(3).指针SQL变量的说明和使用指针SQL变量在引用前也必须在DECLARE部分先说明。其说明格式同CORACLE培训教程3_pro*c使用阿哲4/16语言。在SQL语句中引用时,指针名字前要加前缀“:”(冒号)而不加“*”(星号)。在C语句中用法如同C语言的指针变量。(4).数组SQL变更的说明和引用在SQL语句中引用数组时,只需写数组名(名字前加冒号),不需写下标,在C语句中用法如同C语言的数组变量。使用数组可大大降低网络传输开销。如要向一表插入100行数据,如果没有数组,就要重复100次,而引用后,只须执行一次insert语句、便可一次性插入。例如:EXECSQLBEGINDECLARESECTION;Intemp_number[100];Charemp_name[100][15];Floatsalary[100],commission[100];Intdept_number;EXECSQLENDDECLARESECTION;….EXECSQLSELECTEMPNO,ENAME,SAL,COMMINTO:emp_number,:emp_name,:salary,:commissionFROMEMPWHEREDEPTNO=:dept_number;在使用数组时,应注意以下几点;不支持指针数组只支持一维数组,而emp-name[100][15]视为一维字符串数组最大维数为32767在一条SQL语句中引用多个数组时,这些数组维数应相同在VALUES,SET,INTO或WHERE子名中,不允许把简单SQL变量与数组SQL变量混用不能在DELARE部分初始化数组例如:下面的引用是非法的EXECSQLBEGINDECLARESECTION;Intdept–num[3]={10,20,30};EXECSQLENDDECLARESECTION;EXECSQLSELECTEMPNO,ENAME,SALINTO:emp–num[i],:emp–name[i],:salarg[i]FROMEMP(5)伪类型VARCHAR的说明和引用VARCHAR变量在引用之前也必须在说明段说明,说明时必须指出串的最大长度,如:EXECSQLBEGINDECLARESECTION;Intbook–number;VARCHARbook–name[50];EXECSQLENDDECLARESECTION;在预编绎时,book–name被翻译成C语言中的一个结构变量;ORACLE培训教程3_pro*c使用阿哲5/16Struct{unsignedshortlen;Unsignedchartarr[20];}boo–name由此看出,VARCHAR变量实际上是含长度成员和数组成员的结构变量。在SQL语句中引用时,应引用以冒号为前缀的结构名,而不加下标,在C语句中引用结构成员。VARCHAR变量在作输出变量时,由ORACLE自动设置,在作为输入变量时,程序应先把字符串存入数组成员中,其长度存入长度成员中,然后再在SQL语句中引用。例如:Main(){.......scanf(“90s,90d’,book–name.arr,&book–number);book–name.len=strlen(book–name.arr);EXECSQLUPDATEBOOKSETBNAME=:book–name;BDESC=:book–number;}(6)SQL通信区SQL通信区是用下列语句描述的:EXECSQLINCLUDESQLCA;此部分提供了用户运行程序的成败记录和错误处理。SQLCA的组成SQLCA是一个结构类型的变量,它是ORACLE和应用程序的一个接口。在执行Pro*C程序时,ORACLE把每一个嵌入SQL语句执行的状态信息存入SQLCA中,根据这些信息,可判断SQL语句的执行是否成功,处理的行数,错误信息等,其组成如表所示:Structsqlca{charsqlcaid[8];----标识通讯区longsqlabc;---通讯区的长度longsqlcode;---保留最近执行的SQL语句的状态码struct{unsignedshortsqlerrml;-----信息文本长度}sqlerrm;charsqlerrp[8];longsqlerrd[6];charsqlwarn[8];charsqlext[8];}structsqlcasqlca;其中,sqlcode在程序中最常用到,它保留了最近执行的SQL语句的状态码。程序员根据这些状态码做出相应的处理。这些状态码值如下:0:表示该SQL语句被正确执行,没有发生错误和例外。0:ORACLE执行了该语句,但遇到一个例外(如没找到任何数据)。0:表示由于数据库、系统、网络或应用程序的错误,ORACLE未执行该ORACLE培训教程3_pro*c使用阿哲6/16SQL语句。当出现此类错误时,当前事务一般应回滚。2.应用程序体在Pro*C程序中,能把SQL语句和C语句自由地混合书写,并能在SQL语句中使用SQL变量,嵌入式SQL语句的书写文法是:以关键字EXECSQL开始以C语言的语句终结符(分号)终结SQL语句的作用主要用于同数据库打交道。C语言程序用于控制,输入,输出和数据处理等。(1)连接到ORACLE数据库在对数据库存取之前,必须先把程序与ORACLE数据库连接起来。即登录到ORACLE上。所连接命令应该是应用程序的第一个可执行命令。连接命令格式如下:EXECSQLCONNECT:用户名IDENTIFIEDBY:口令或EXECSQLCONNECT:用户名/口令在使用上述两种格式进行登入时,应当首先在说明段定义包含用户名和口令的SQL变量,并在执行CONNECT之前设置它们,否则会造成登录失败。例如:EXECSQLBEGINDECLARESECTION;VARCHARusename[20];VARCHARpassword[20];EXECSQLENDDECLARE..........strcpy(usename.arr,“CSOTT’);usename.len=strlen(username.arr);strcpy(password.arr,“TIGER’);password.len=strlen(password.arr);EXECSQLWHENEVERSQLERRORGOTOSQLERR;EXECSQLCONNECT:usernameINDNTIFIEDBY:p

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功