ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:52.06KB ,
资源ID:29790984      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29790984.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ORACLEtrain3.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ORACLEtrain3.docx

1、ORACLEtrain3Pro * 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最完善地结合起来, 具有完备的过程处理能力,又能完成任何数据库的处理品任务,使用户可

2、以通过编程完成各种类型的报表。在Pro*C程序中可以嵌入SQL语言, 利用这些SQL语言可以完成动态地建立、修改和删除数据库中的表,也可以查询、插入、修改和删除数据库表中的行, 还可以实现事务的提交和回滚。 在Pro*C程序中还可以嵌入PL/SQL块, 以改进应用程序的性能, 特别是在网络环境下,可以减少网络传输和处理的总开销。 2Pro*C的程序结构图 通俗来说,Pro*C程序实际是内嵌有SQL语句或PL/SQL块的C程序, 因此它的组成很类似C程序。 但因为它内嵌有SQL语句或PL/SQL块, 所以它还含有与之不同的成份。为了让大家对Pro*C有个感性的认识, 特将二者差别比较如下: C的

3、全程变量说明 C源程序 函数1:同函数K。 函数2:同函数K。 C的局部变量说明 函数K 可执行语句 应用程序首部 C的外部变量说明 外部说明段(ORACLE变量说明) 通讯区说明 Pro*C源程序 函数1:同函数K。 函数2:同函数K。 C局部变量说明 程序体 内部说明部分 内部说明段 通讯区说明 函数K C的可执行语句 可执行语句 SQL的可执行语句 或PL/SQL块二Pro*C程序的组成结构每一个Pro*C程序都包括两部分:(1)应用程序首部;(2)应用程序体应用程序首部定义了ORACLE数据库的有关变量, 为在C语言中操纵ORACLE数据库做好了准备。应用程序体基本上由Pro*C的SQ

4、L语句调用组成。主要指查询SELECT、INSERT、UPDATE、DELETE等语句。 应用程序的组成结构如图所示: 应用程序首部描述部分SQL通信区应用程序体EXEC SQL BEGIN DECLARE SECTION (SQL变量的定义)EXEC SQL END DECLARE SECTION;EXEC SQL INCLUDE SQLLA;EXEC SQL CONNECT: IDENTIFIED BY: SQL 语句及游标的使用1. 应用程序首部 应用程序的首部就是Pro*C的开始部分。它包括以下三部分: C变量描述部分; SQL变量描述部分(DECLARE部分); SQL通信区。(1)

5、 .DECLARE部分(描述部分)描述部分说明程序的SQL变量, 定义部分以EXEC SQL BEGIN DECLARE SECTION ;开始和以 EXEC SQL END DECLARE SECTION ;结束的。它可以出现在程序的主部,也可出现在局部 SQL变量的说明和使用在说明段能为SQL变量指定的数据类型如表所示:数据类型描述CHARCHAR(n)INT SHORT LONG FLOAT DOUBLE VARCHAR单字符n个字符数组整数短整数单精度浮点数双精度浮点数变长字符串 这些数据类型实际上就是C语言的数据类型, 其中VARCHAR中视为C数据类型的扩充。这在以后会谈到。SQL

6、变量的使用应注意以下几点: 必须在描述部分明确定义 必须使用与其定义相同的大小写格式 在SQL语句中使用时,必须在其之前加一个“:”(冒号),但在C语句中引用时不需加冒号。 不能是SQL命令中的保留字。 可以带指示变量。例如:EXEC SQL BEGIN DECLARE SECTIONS; VARCHAR programe30; Int porgsal, pempno; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT ENAME , SAL INTO: programe, : progsal FROM EMP WHERE EMPNO = : pemp

7、no; (2). 指示器变量的说明和引用指示变量实际上也是一类SQL变量,它被用来管理与其相关联的宿主变量(即在SQL语句中充 当输入或输出的变量)。每一个宿主变量都可定义一个指示器变量,主要用于处理空值(NULL)指示器变量的说明基本同一般SQL变量一样, 但必须定义成2字节的整型,如SHORT、INT。在SQL语句中引用时, 其前也应加“:”(冒号),而且必须附在其相关联的宿主变量之后,在C语句中,可独立使用。当指示器变量为-1时,表示空值。例如:EXEC SQL BEGIN DECLARE SECTION ; INT dept- number; SHORT ind num; CHAR e

8、mp name;EXEC SQL END DECLARE SECTION ; Scanf(“90d %s”, & dept- number , dept name ); If (dept number =0) Ind num = -1; Else Ind num = 0;EXEC SQL INSERT INTO DEPT (DEPTNO, DNAME)VALUES(:dept number : ind- num , :dept name);其中ind num是dept number 的指示器变量。当输入的dept number 值是0时, 则向DEPT 表的DEPTNO列插入空值。 (3).指

9、针SQL变量的说明和使用指针SQL变量在引用前也必须在DECLARE 部分先说明。其说明格式同C语言。在SQL语句中引用时,指针名字前要加前缀“:”(冒号)而不加“*”(星号)。在C语句中用法如同C语言的指针变量。 (4).数组SQL变更的说明和引用在SQL语句中引用数组时,只需写数组名(名字前加冒号), 不需写下标,在C语句中用法如同C语言的数组变量。使用数组可大大降低网络传输开销。如要向一表插入100行数据,如果没有数组,就要重复100次, 而引用后,只须执行一次insert语句、便可一次性插入。例如: EXEC SQL BEGIN DECLARE SECTION; Int emp_num

10、ber100; Char emp_name10015; Float salary100,commission100; Int dept_number; EXEC SQL END DECLARE SECTION; . EXEC SQL SELECT EMPNO,ENAME,SAL,COMM INTO :emp_number,:emp_name,:salary,:commission FROM EMP WHERE DEPTNO=:dept_number; 在使用数组时,应注意以下几点; 不支持指针数组 只支持一维数组, 而 emp-name 10015视为一维字符串 数组最大维数为32767 在一

11、条SQL语句中引用多个数组时,这些数组维数应相同 在VALUES , SET, INTO 或WHERE子名中, 不允许把简单SQL变量与数组SQL变量混用 不能在DELARE部分初始化数组例如:下面的引用是非法的 EXEC SQL BEGIN DECLARE SECTION; Int dept num 3 = 10,20,30; EXEC SQL END DECLARE SECTION ; EXEC SQL SELECT EMPNO, ENAME , SAL INTO : emp num i , : emp name i , : salarg i FROM EMP (5) 伪类型VARCHAR

12、的说明和引用 VARCHAR变量在引用之前也必须在说明段说明, 说明时必须指出串的最大 长度,如: EXEC SQL BEGIN DECLARE SECTION; Int book number; VARCHAR book name 50 ; EXEC SQL END DECLARE SECTION ; 在预编绎时, book name 被翻译成C语言中的一个结构变量; Struct unsigned short len ; Unsigned chart arr 20 ; boo name 由此看出, VARCHAR变量实际上是含长度成员和数组成员的结构变量。在SQL语句中引用时,应引用以冒号

13、为前缀的结构名, 而不加下标,在C语句 中引用结构成员。VARCHAR变量在作输出变量时,由ORACLE自动设置, 在作为输入变量时,程序应先把字符串存入数组成员中, 其长度存入长度成员中,然后再在SQL语句中引用。例如: Main( ) . scanf(“90s, 90d, book name .arr, & book number ); book name .len = strlen (book name .arr); EXEC SQL UPDATE BOOK SET BNAME = : book name ; BDESC = : book number ; (6) SQL通信区 SQL

14、通信区是用下列语句描述的: EXEC SQL INCLUDE SQLCA; 此部分提供了用户运行程序的成败记录和错误处理。 SQLCA的组成 SQLCA是一个结构类型的变量,它是ORACLE 和应用程序的一个接口。在执行 Pro*C程序时, ORACLE 把每一个嵌入SQL语句执行的状态信息存入SQLCA中, 根据这些信息,可判断SQL语句的执行是否成功,处理的行数,错误信息等,其组成如表所示: Struct sqlca char sqlcaid 8 ; -标识通讯区 long sqlabc; - 通讯区的长度 long sqlcode; -保留最近执行的SQL语句的状态码 struct un

15、signed short sqlerrml; -信息文本长度 sqlerrm; char sqlerrp 8 ; long sqlerrd 6 ; char sqlwarn 8 ; char sqlext 8 ; struct sqlca sqlca; 其中, sqlcode在程序中最常用到,它保留了最近执行的SQL语句的状态码。程序员根据这些状态码做出相应的处理。这些状态码值如下: 0: 表示该SQL语句被正确执行,没有发生错误和例外。 0:ORACLE执行了该语句,但遇到一个例外(如没找到任何数据)。 0:表示由于数据库、系统、网络或应用程序的错误,ORACLE未执行该SQL语句。 当出现

16、此类错误时,当前事务一般应回滚。 2应用程序体在Pro*C程序中, 能把SQL语句和C语句自由地混合书写,并能在SQL语句中使用SQL变量,嵌入式SQL语句的书写文法是: 以关键字EXEC SQL开始 以C语言的语句终结符(分号)终结SQL语句的作用主要用于同数据库打交道。C语言程序用于控制,输入,输出和数据处理等。(1) 连接到ORACLE数据库在对数据库存取之前,必须先把程序与ORACLE数据库连接起来。即登录到ORACLE上。所连接命令应该是应用程序的第一个可执行命令。连接命令格式如下: EXEC SQL CONNECT: IDENTIFIED BY : 或EXEC SQL CONNEC

17、T: / 在使用上述两种格式进行登入时, 应当首先在说明段定义包含用户名和口令的 SQL 变量,并在执行CONNECT之前设置它们,否则会造成登录失败。例如:EXEC SQL BEGIN DECLARE SECTION ; VARCHAR usename 20; VARCHAR password20;EXEC SQL END DECLARE . strcpy ( usename.arr, “CSOTT); usename.len = strlen (username.arr); strcpy (password.arr , “TIGER); password .len = strlen( pa

18、ssword .arr); EXEC SQL WHENEVER SQLERROR GOTO SQLERR; EXEC SQL CONNECT :username INDNTIFIED BY : password; 注意: 不能把用户名和口令直接编写到CONNECT语句中,或者把用引号()括起来的字母串在CONNECT 语句中, 如下面的语句是无效的。 EXEC SQL CONNECT SCOTT INENTIFIED BY TIGER; EXEC SQL CONNECT SCOTT IDENTIFIED BY TIGER;(2). 插入、更新和删除 在讲述SQL语言时已详细讲过, 这里就不举例

19、说明了。(3). 数据库查询及游标的使用 在PRO*C中, 查询可分为两种类型: 返回单行或定行数的查询; 返回多行的查询.此种查询要求使用游标来控制每一行或每一组(主变量用数组).1) 返回单行或定行数的查询在PRO*C中的查询SQL SELECT语句由以下几个子句组成: SELECT INTO FROM WHERE CONNECT BY UNION INTERSECT MINUS GROUP BY HAVING ORDER BY 其中WHERE子句中的查询条件可以是一个属性或多个属性的集合,在执行是赋值的主变量也可放在WHERE子句中.WHERE子句中所用的主变量称为输入主变量。如: SE

20、LECT EMPNO, JOB, SAL INTO:PNAME, :PJOB, :PSAL FROM EMP WHERE EMPNO=:PEMPNO;若没有找到限定的行, 则SQLCA.SQLCODE返回”+1403”, 表明”没有找到”。INTO从句中的主变量叫输出主变量,它提供了查询时所需要的信息。在任何项送给主变量之前,都要求ORACLE把这些项转换成主变量的数据类型。对于数字是通过截断来完成的(如:9.23转换为9)。如果已确定查询只返回一行,那么就不必使用游标,只给SELECT语句增加一个INTO子句即可。在语义上INTO语句在FROM之前的查询中有多少个选择项就有多少个输出主变量。

21、若在SELECT项中表达式的数目不等于INTO子句中主变量的数目,就把SQLCA.SQLWARN3置为”W”。2)多行查询及游标的使用如果查询返回多行或不知道返回多少行,使用带有ORACLE游标(CURSOR)的SELECT语句。游标是ORACLE和PRO*C存放查询结果的工作区域。一个游标(已命名的)与一条SELECT语句相关联。操作游标有由4条命令:(1)DECLARE CURSOR;(2)OPEN CURSOR;(3)FETCH;(4)CLOSE CURSOR。A. 定义游标一个游标必须首先定义, 才能使用它。语法为:EXEC SQL DECLARE 游标名CORSOR FOR SELE

22、CT 列 FROM 表例如:EXEC SQL DECLARE CSOR, CURSOR FOR SELECT ENAME , JOB, SAL FROM EMPWHERE DEPTNO=:DEPTNO;当赋给一个与查询相关联的游标CURSOR之后, 当SELECT查询EMP时可从数据库中返回多行,这些行就是CURSOR的一个活动区域。注意:1) 定义游标必须在对游标操作之前完成;2) PRO*C不能引用没有定义的游标;3) 游标定义后,其作用范围是整个程序。所以对一个程序来讲, 同时定义两个相同的游标是错误的。B. 打开游标打开游标的OPEN语句主要用来输入主变量的内容,这些主要是WHERE中

23、使用的主变量。打开游标的语句是:EXEC SQL OPEN 游标名当打开游标后,可以从相关的查询中取出多于一行的结果。所有满足查询标准的行组成一集合,叫做“游标活动集”。通过取操作,活动集中的每一行或每一组是一个一个返回的,查询完成后, 游标就可关闭了。如图所示:定义游标:DECLARE开始查询:SELECT打开游标:OPEN从活动集取数据:FETCH查询完成关闭游标:CLOSE注意:1)游标处于活动集的第一行前面; 2)若改变了输入主变量就必须重新打开游标。C. 取数据从活动集中取出一行或一组把结果送到输出主变量中的过程叫取数据。输出主变量的定义在取数据语句中。取数据的语句如下:EXEC S

24、QL FETCH游标名INTO:主变量1,主变量2,FETCH的工作过程如图所示:查询结果游标FETCH查询结果在游标打开后 如图所示的查询结果指满足查询条件的查询结果。使用FETCH应注意以下几点: 游标必须先定义再打开。 只有在游标打开之后才能取数据,即执行FETCH语句。 FETCH语句每执行一次,从当前行或当前组取数据一次,下一行或下一组向上移一次。游标每次所指的行或组都为当前行或当前组,而FETCH每次都是取游标所指定的行或组的数据。 当游标活动集空之后,ORCLE返回一个SQLCA。SQLCA(=1403)。 若希望此游标再操作, 必须先关闭再打开它。 在C程序中可以开辟一个内存空

25、间,来存放操作结果,这样就能利用开辟的空间来灵活操纵查询的结果。D关闭游标取完活动集中所有行后,必须关闭游标,以释放与该游标有关的资源。关闭游标的格式为:EXEC SQL CLOSE 游标名;例如:EXEC SQL CLOSE C1;ORACLE V5.0版支持SQL格式“CURRENT OF CURSOR”。这条语句将指向一个游标中最新取出的行, 以用于修改和删除操作。该语句必须有取操作之后使用,它等同存储一个ROWID,并使用它。(4)举例EXEC SQL DECLARE SALESPEOPLE CURSOR FOR SELECT SSNO, NAME, SALARYFROM EMPLOY

26、EEWHERE DNAME=Sales;EXEC SQL OPEN SALESPEOPLE;EXEC SQL FETCH SALESPEOPLEINTO :SS,:NAME,:SAL;EXEC SQL CLOSE SALESPEOPLE;(5)SQL嵌套的方法及应用嵌入SQL与交互式SQL在形式上有如下差别:1) 在SQL语句前增加前缀“EXEC SQL”, 这一小小的差别其目的是在于预编译时容易识别出来, 以便把每一条SQL作为一条高级语言来处理。2) 每一SQL语句分为说明性语句和可执行语句两大类。可执行语句又分为数据定义、数据控制、数据操纵、数据检索四大类。可执行性SQL语句写在高级语言

27、的可执行处;说明性SQL语句写在高级语言的说明性的地方。 例如:在PRO*C程序中建立一个名为BOOK的表结构,过程如下:#includestdio.hEXEC SQL BEGIN DECLARE SECTION;VARCHAR uid20, pwd20;EXEC SQL END DECLARE SECTION;EXEC SQL INCLUDE SQLCA;Main() /*login database*/strcpy(uid.arr,wu);uid.len=strlen(uid,arr);strcpy(pwd.arr,wu);pwd.len=strlen(pwd.arr);EXEC SQL

28、CONNECT:uid IDENTIFEED BY:pwd;EXEC SQL CREATE TABLE book ( acqnum number, copies number , price number);EXEC SQL COMMIT WORK RELEASE;EXIT;PRO*C可非常简便灵活地访问ORCLE数据库中的数据,同时又具有C语言高速的特点,因而可完成一些ORACLE产品不能完成的任务,例如以下一个固定的特殊格式输出结果。SQL嵌套源程序示例#uncludetypedef char asciz20;EXEC SQL BEGIN DECLARE SECTION;EXEC SQL

29、TYPE asciz IS STRING (20) REFERENCE;asciz username;asciz password;asciz emp_name(5);int emp_number(5a);float salary5;EXEC SQL END DECLARE SECTION;EXEC SQL INCLUDE sqlca;Void print_rows();Void sqlerror();Main()int num_ret;strcpy(username,”SCOTT);strcpy(password, “TYGER”);EXEC SQL WHENEVER SQLERROR DO sqlerror();EXEC SQL CONNECT:username IDENTIFIED BY:password;Print (“nConnected to ORACLE as user:%sn”, username);EXEC SQL DECLARE c1 CURSOR FOR SELECT EMPNO , E

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1