oracle中proc的学习

上传人:206****923 文档编号:41175768 上传时间:2018-05-28 格式:DOCX 页数:24 大小:33.92KB
返回 下载 相关 举报
oracle中proc的学习_第1页
第1页 / 共24页
oracle中proc的学习_第2页
第2页 / 共24页
oracle中proc的学习_第3页
第3页 / 共24页
oracle中proc的学习_第4页
第4页 / 共24页
oracle中proc的学习_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《oracle中proc的学习》由会员分享,可在线阅读,更多相关《oracle中proc的学习(24页珍藏版)》请在金锄头文库上搜索。

1、 一 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 块, 所以它还含有 与之不同的成份。

3、为了让大家对 Pro*C 有个感性的认识, 特将二者差别比较如 下: C 的全程变量说明 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)应用程序体 应用程

4、序首部定义了 ORACLE 数据库的有关变量, 为在 C 语 言中操纵 ORACLE数据库做好了准备。应用程序体基本上由 Pro*C 的 SQL 语句调用组成。主要指 查询 SELECT、INSERT、UPDATE、 DELETE 等语句。 应用程序的组成结构如图所示: EXEC SQL BEGIN DECLARE SECTION (SQL 变量的定义)EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE SQLLA; EXEC SQL CONNECT: IDENTIFIED BY: SQL 语句及游标的使用1. 应用程序首部 应用程序的首部就是 Pro

5、*C 的开始部分。它包括以下三部分: l C 变量描述部分; l SQL 变量描述部分(DECLARE 部分); l SQL 通信区。(1) .DECLARE 部分(描述部分) 描述部分说明程 序的 SQL 变量, 定义部分以 EXEC SQL BEGIN DECLARE SECTION ;开始和以 EXEC SQL END DECLARE SECTION ;结束的。它可以出现在 程序的主部,也可出现在局部 l SQL 变量的说明和使用 在说明段能为 SQL 变量指定的数据类型如 表所示: 数据类型 描述 CHARCHAR(n)INT SHORT LONG FLOAT DOUBLE VARCH

6、AR 单字符 n 个字符数组整数 短整数单精度浮点数双精度浮点数变长字符串 这些数据类型实际上就是 C 语言的数据类型, 其中 VARCHAR 中视为 C 数据类型 的扩充。这在以后会谈到。 SQL 变量的使用应注意以下几点: l 必须在描述部分明确定义 l 必须使用与其定义相同的大小写格式 l 在 SQL 语句中使用时,必须在其之前加一个“:”(冒号),但在 C 语句中引 用时不需加冒号。 l 不能是 SQL 命令中的保留字。 l 可以带指示变量。 例如:EXEC SQL BEGIN DECLARE SECTIONS; VARCHAR programe30; Int porgsal, pem

7、pno; EXEC SQL END DECLARE SECTION;EXEC SQL SELECT ENAME , SAL INTO: programe, : progsal FROM EMP WHERE EMPNO = : pempno;(2). 指示器变量的说明和引用 指示变量实际上也是一类 SQL 变量,它被用来管理 与其相关联的宿主变量(即 在 SQL 语句中充 当输入或输出的变量)。每一个宿主变量都可定义一个指示器 变量,主要用于处理空值(NULL) 指示器 变量的说明基本同一般 SQL 变量一样, 但必须定义成 2 字节的整型, 如 SHORT、INT。在 SQL 语句中引用时,

8、其前也应加“:”(冒号),而且必须 附在其相关联的宿主变量之后,在 C 语句中,可独立使用。当指示器变量为-1 时,表示空值。例如: EXEC SQL BEGIN DECLARE SECTION ; INT dept- number; SHORT ind num; CHAR emp name; EXEC SQL END DECLARE SECTION ; Scanf(“90d %s”, If (dept number =0) Ind num = -1; Else Ind num = 0; EXEC SQL INSERT INTO DEPT (DEPTNO, DNAME) VALUES(:dep

9、t number : ind- num , :dept name); 其 中 ind num 是 dept number 的指示器变量。当输入的 dept number 值是 0 时, 则向 DEPT 表的 DEPTNO 列插入空值。 (3).指针 SQL 变量的说明和使用指针 SQL 变量在引用前也必须在 DECLARE 部分先说明。其说明格式同 C 语言。 在 SQL 语句中引用时,指针名字前要加前缀“:”(冒号)而不加“*”(星号) 。在 C 语句中用法如同 C 语言的指针变量。 (4). 数组 SQL 变更的说明和引用 在 SQL 语句中引用数组时,只需写数组名(名字前加冒号), 不需

10、写下标,在 C 语句中用法如同 C 语言的数组变量。 使 用数组可大大降低网络传输开销。如要向一表插入 100 行数据,如果没有数 组,就要重复 100 次, 而引用后,只须执行一次 insert 语句、便可一次性插 入。例如: EXEC SQL BEGIN DECLARE SECTION; Int emp_number100; Char emp_name10015; Float salary100,commission100; Int dept_number; EXEC SQL END DECLARE SECTION; . EXEC SQL SELECT EMPNO,ENAME,SAL,CO

11、MM INTO :emp_number,:emp_name,:salary,:commissionFROM EMP WHERE DEPTNO=:dept_number; 在使用数组时,应注意以下几点; l 不支持指针数组 l 只支持一维数组, 而 emp-name 10015视为一维字符串 l 数组最大维数为 32767 l 在一条 SQL 语句中引用多个数组时,这些数组维数应相同 l 在 VALUES , SET, INTO 或 WHERE 子名中, 不允许把简单 SQL 变量与数组 SQL 变量混用 l 不能在 DELARE 部分初始化数组 例如:下面的引用是非法的 EXEC SQL BE

12、GIN DECLARE SECTION; Int dept num 3 = ; EXEC SQL END DECLARE SECTION ;EXEC SQL SELECT EMPNO, ENAME , SAL INTO : emp num i , : emp name i , : salarg i FROM EMP (5) 伪类型 VARCHAR 的说明和引用 VARCHAR 变量在引用之前也必须在说明段说明, 说明时必须指出串的最大 长度,如: EXEC SQL BEGIN DECLARE SECTION; Int book number; VARCHAR book name 50 ; EX

13、EC SQL END DECLARE SECTION ; 在预编绎时, book name 被翻译成 C 语言中的一个结构变量; Struct unsigned short len ; Unsigned chart arr 20 ; boo name 由此看出, VARCHAR 变量实际上是含长度成员和数组成员的结构变量。在 SQL 语句中引用时,应引用以冒号为前缀的结构名, 而不加下标,在 C 语句 中引 用结构成员。 VARCHAR 变量在作输出变量时,由 ORACLE 自动设置, 在作为输入变量时,程 序应先把字符串存入数组成员中, 其长度存入长度成员中,然后再在 SQL 语句 中引用。

14、例如: Main( ) . scanf(“90s, 90d, book name .arr, book name .len = strlen (book name .arr); EXEC SQL UPDATE BOOK SET BNAME = : book name ; BDESC = : book number ; (6) SQL 通信区SQL 通信区是用下列语句描述的: EXEC SQL INCLUDE SQLCA; 此部分提供了用户运行程序的成败记录和错误处理。SQLCA 的组成 SQLCA 是一个结构类型的变量,它是 ORACLE 和应用程序的一个接口。在执行 Pro*C 程序时, O

15、RACLE 把每一个嵌入 SQL 语句执行的状态信息存入 SQLCA 中,根据这些信息,可判断 SQL 语句的执行是否成功,处理的行数,错误信息等, 其组成如表所示: Struct sqlca char sqlcaid 8 ; - 标识通讯区 long sqlabc; - 通讯区的长度 long sqlcode; - 保留最近执行的 SQL 语句的状态码 struct unsigned short sqlerrml; - 信息文本长度 sqlerrm; char sqlerrp 8 ; long sqlerrd 6 ; char sqlwarn 8 ; char sqlext 8 ; stru

16、ct sqlca sqlca; 其中, sqlcode 在程序中最常用到,它保留了最近执行的 SQL 语句的状态码。 程序员根据这些状态码做出相应的处理。这些状态码值如下: 0: 表示该 SQL 语句被正确执行,没有发生错误和例外。 0:ORACLE 执行了该语句,但遇到一个例外(如没找到任何数据)。IDENTIFIED BY : 或 EXEC SQL CONNECT: / 在使用上述两种格式进行登入时, 应当首先在说明段定义包含用户名和口令的 SQL 变量,并在执行 CONNECT 之前设置它们,否则会造成登录失败。例如: EXEC SQL BEGIN DECLARE SECTION ; VARCHAR usename 20; VARCHAR passw

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号