Oracle_ProC编程入门.pdf
《Oracle_ProC编程入门.pdf》由会员分享,可在线阅读,更多相关《Oracle_ProC编程入门.pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Oracle Pro*C 编程入门 易初电子有限公司 第 1 页 共 20 页 Oracle Pro*C 编程入门编程入门 研发中心 刘小强Oracle Pro*C 编程入门 易初电子有限公司 第 2 页 共 20 页 目录目录 1 引言.3 1.1 编写目的.3 1.2 编写背景.3 1.3 参考资料.3 2 Pro*C简介.3 3 预编译与编译.4 3.1 例程.4 3.2 编译过程.4 3.3 Pro*C头文件和库文件.4 3.4 编译过程举例.4 3.5 Oracle预编译选项配置文件。.4 4 Pro*C语法结构.6 4.1 嵌入SQL语句在程序中的标志。.6 4.2 换行.6 4.
2、3 程序结构.6 4.4 程序中对数据库的连接.6 4.5 嵌入PL/SQL块.7 4.6 大小写.7 4.7 嵌入的SQL语句分类.7 4.8 宿主变量.8 4.9 预编译选项配置文件.8 4.10 伪数据类型.9 4.11 注释.9 4.12 换行.9 4.13 游标的使用。.9 4.14 WHENEVER语句。.11 4.15 事务处理语句.12 5 动态SQL.12 5.1 Oracle方法.13 5.1.1 动态SQL语句的处理过程.13 5.1.2 Oracle使用动态SQL的四种方法.13 5.2 ANSI方法.16 5.2.1 使用ANSI方法的一些注意事项.16 5.2.2
3、ANSI方法和Oracle方法的不同.16 5.2.3 ANSI处理方法对动态SQL语句的处理步骤.16 5.2.4 程序举例.17 Oracle Pro*C 编程入门 易初电子有限公司 第 3 页 共 20 页 1 引言引言 1.1 编写目的 a.针对公司现状,给公司员工提供一个学习 Pro*C 的入门教材,使公司员工能尽快熟悉 Oracle 的嵌入式开发技术 1.2 编写背景 a.公司原有系统的后台数据库为 Informix,现拟向 Oracle 进行移植。b.公司原有程序中有一大部分是基于 Informix 数据库的,因为数据库的移植,所以原有程序也要相应的做改变。1.3 参考资料 序号
4、序号 名称名称 作者作者 发布日期发布日期 出版单位出版单位 1 Oracle 数据库高级应用开发技术 袁鹏飞 2000/7 人民邮电出版社 2 Oracle Pro*C 程序设计 电子文档 3 Oracle 培训教材 电子文档 2 Pro*C 简介简介 在 ORACLE 数据库管理和系统中,有三种访问数据库的方法;用 SQL*Plus,它有 SQL 命令以交互的应用程序访问数据库;用第四代语言应用开发工具开发的应用程序访问数据库,这些工具有SQL*Froms,QL*Reportwriter,SQL*Menu 等;利用在第三代语言内嵌入的 SQL 语言或 ORACLE 库函数调用来访问。Pro
5、*C 就属于第三种开发工具之一,它把过程化语言 C 和非过程化语言 SQL 最完 善地结合起来,具有完备的过程处理能力,又能完成任何数据库的处理品任务,使 用户可以通过编程完成各种类型的报表。在 Pro*C 程序中可以嵌入 SQL 语言,利 用这些 SQL 语言可以完成动态地建立、修改和删除数据库中的表,也可以查询、插 入、修改和删除数据库表中的行,还可以实现事务的提交和回滚。在 Pro*C 程序中还可以嵌入 PL/SQL 块,以改进应用程序的性能,特别是在网络 环境下,可以减少网络传输和处理的总开销。Oracle Pro*C 编程入门 易初电子有限公司 第 4 页 共 20 页 3 预编译与
6、编译预编译与编译 3.1 例程 UNIX 下 Pro*C 和例程在$ORACLE_HOME/precomp/demo/proc 下,用户可根据自己的需要查看相关的例程。3.2 编译过程 Pro*C 源文件(*.pc)?C 源文件(*.c)?目标文件(*.o)-可执行文件 3.3 Pro*C 头文件和库文件 文件名称 作用 ORACA.H 定义 Oracle 通信区域(ORACA)结构,应用程序使用 ORACA 诊断运行时刻错误和监视应用程序所使用的各种 Oracle 资源 SQLCA.H 定义 SQL 通信区(SQLCA)结构,每条 SQL 语句执行后都将更新SQLCA 数据,应用程序使用它可
7、以诊断运行时刻错误 SQL2OCI。H 包含 SQLLIB 函数,它们使 Pro*C 应用程序能够获得 OCI 环境句柄和服务环境句柄 SQLAPR.H 与 OCI 连接的 SQLLIB 函数的 ANSI 原形定义 SQLCPR.H Pro*C 产生的与平台相关的 SQLLIB 函数的 ANSI 原形定义 SQLDA.H 包含 SQL 描述区(SQLDA)数据结构定义 SQLPROTO.H 已经被 SQLCPR.H 头文件代替,在 Pro*C 早期版本中有 ORASQL8.LIB Pro*C/C+输入链接库 3.4 编译过程举例.pc?.c:$proc iname=sample1.pc ona
8、me=sample1.c.c?.o$cc c sample1.c.o?可执行文件$cc L$ORACLE_HOME/lib lclntsh o sample1 sample1.o 3.5 Oracle 预编译选项配置文件。Pro*C 预编译时的选项很多,可以把它放到一个文件中.如果在预编译时不指定配置文件,则默认配置文件是$ORACLE_HOME/precomp/admin/pcscfg.cfg 这个文件一开始是空的,用户可以把一些最常用的预编译选出项写在里面。预编译配置选项见下表(更加详细的表请见Oracle8i 数据库高级应用开发技术,公司内部资料):AUTO_CONNECT 允许自动连接
9、到 ops$帐号 Oracle Pro*C 编程入门 易初电子有限公司 第 5 页 共 20 页 CHAR_MAP*正在映射字符数组和字符串 CLOSE_ON_COMMIT 关闭所有 COMMIT 游标 CODEKR_C 将要生成的代码类型 COMP_CHARSET C 编译器支持的字符集类型 CONFIG 用另一配置文件覆盖系统配置文件 CPP_SUFFIX 覆盖缺省的 C+文件名后缀 DBMSNATIVE 兼容模式 DEF_SQLCODE 生成#define SQLCODE sqlca.sqlcode 宏 DEFINE*定义预处理器符号 DURATIONTRANSACTION 设置高速缓存
10、中对象的 pin 持续时间 DYNAMIC 指定 Oracle 或 ANSI 动态 SQL 语义 ERRORS 是否将错误消息发送到终端 ERRTYPE 输入文件的列表文件名称错误 FIPS*ANSI 的 FIPS 标志不符合用法 HEADER 为预编译标题指定文件扩展名 HOLD_CURSOR*在游标高速缓存中控制游标保留 INAME 输入文件的名称 INCLUDE*包括文件的目录路径 INTYPE 有关类型信息的输入文件名称 LINES 将#line 指令添加到生成的代码中 LNAME 覆盖缺省列表文件名 LTYPE 列表文件中生成的数据量 MAXLITERAL 生成的文字串的最大长度 M
11、AXOPENCURSORS*高速缓存的开放游标的最大数量 MODE 代码符合 Oracle 或 ANSI 规则 NLS_CHAR 指定国家语言字符变量 NLS_LOCAL 控制 NLS 字符语义的实现方法 OBJECTS 支持对象类型 ONAME 输出文件名 ORACA*控制 ORACA 的使用 PAGELEN 列表文件页面长度 PARSE 控制进行语法分析的非 SQL 代码 PREFETCH 游标 OPEN 期间预读取的行数 RELEASE_CURSOR 控制从游标高速缓存中释放游标 SELECT_ERROR*控制选择标记错误 SQLCHECK*编译时间 SQL 校验总量 SYS_INCLU
12、DE 系统标题文件所在目录 THREADS 指示多线程应用程序 TYPE_CODE 将 Oracle 或 ANSI 类型代码用于动态 SQL UNSAFE_NULL 允许在没有指示变量的情况下进行 NULL 读取 Oracle Pro*C 编程入门 USERID 用户名/口令 dbname 连接串 VARCHAR 允许使用隐式 varchar 结构 VERSION*将要返回的对象版本 4 Pro*C 语法结构语法结构 4.1 嵌入 SQL 语句在程序中的标志。嵌入式语句以 EXEC SQL 开头,以分号结束.4.2 换行 当一行写不下一条嵌入式 SQL 语句时,可以用反斜线()换行(也可以不用
13、,但为 了程序的可读性好一些,建议使用)4.3 程序结构 每一个 Pro*C 程序都包括两部分:(1)应用程序首部;(2)应用程序体 应用程序首部定义了 ORACLE 数据库的有关变量,为在 C 语言中操纵 ORACLE 数据库做好了准备。应用程序体基本上由 Pro*C 的 SQL 语句调用组成。主要指查询SELECT、INSERT、UPDATE、DELETE 等语句。应用程序的组成结构如图所示:易初电子有限公司 第 6 页 共 20 页 EXEC SQL BEGIN DECLARE SECTION (SQL 变量的定义)EXEC SQL END DECLARE SECTION;EXEC SQ
14、L INCLUDE SQLLA;EXEC SQL CONNECT:IDENTIFIED BY:SQL 语句及游标的使用 4.4 程序中对数据库的连接 这里着重说一下 Pro*C 中的 CONNECT 部分:connect 部分用于连接数据,Oracle 的数据库是基于表空间的数据库,它不像 Informix 那样是多库结构,Oracle 只有一个库!下面例程详细介绍了 Pro*C 的连接过程:int connect()printf(Now we will connect to Oracle databasen);printf(nPlease input your username:);描述部分
15、 SQL 通信区 应用程序体 应用程序首部 Oracle Pro*C 编程入门 易初电子有限公司 第 7 页 共 20 页 fgets(username,sizeof(username),stdin);usernamestrlen(username)-1=0;printf(nPlease input your password:);fgets(password,sizeof(password),stdin);passwordstrlen(password)-1=0;EXEC SQL WHENEVER SQLERROR GOTO error_msg;/真正起连接做用的是下面这一句 EXEC SQ
16、L CONNECT:username IDENTIFIED BY:password;printf(Connect successed!n);return 0;error_msg:printf(Connect failedn);return-1;4.5 嵌入 PL/SQL 块 当应用程序需要嵌入 PL/SQL 块时,需要在 PL/SQL 块的前面加上 EXEC SQL EXECUTE,在结尾加上 END-EXEC 和分号.内嵌的 PL/SQL 块和 Oracle 中的 PL/SQL 块的用法一致。4.6 大小写 嵌入式语句内不区分大小写.4.7 嵌入的 SQL 语句分类 嵌入的 SQL 语句可分
17、为两类:可执行语句和伪指令。可执行语句就是一般的 SQL 语句,伪指令用于声明 ORACLE 对象,通信区域和 SQL 变量等.伪指令语句名称 说明 ARRAYLEN 在 PL/SQL 中使用宿主数组 BEGIN DECLARE SECTION END DECLARE SECTION 在预编译源程序中定义宿主变量和指示符变量声明区域 DECLARE 命名 Oracle 模式对象 INCLUDE 拷贝文件 TYPE 数据类型等价处理 VAR 变量类型等价处理 WHENEVER 运行错误处理 Oracle 中可执行的 SQL 语句如下:Oracle Pro*C 编程入门 嵌入式 SQL 语句 说明
18、 CONNECT,CLOSE,ALLOCATE,FREE,CREATE,ALTER,DROP,GRANT,REVOKE,AUDIT,NOAUDIT,CONTEXT,ENABLE THREADS,RENAME,COMMENT,ANALYZE,TRUNCATE 数据定义与控制语句 INSERT,UPDATE,DELETE,SELECT,OPEN,FETCH,LOCK TABLE,EXPLAIN PLAN 数据处理语句 COMMIT,ROLLBACK,SAVEPOINT,SET TRANSACTION 事务处理语句 DESCRIBE,EXECUTE,PREPARE 动态 SQL 处理语句 ALTER
19、 SESSION,SET ROLE 会话控制语句 4.8 宿主变量 宿主变量的使用是为了实现 Oracle 数据库和应用程序之间的数据通信。.定义 和 Informix 类似,Pro*C 中宿主变量也有两种定义方法。a.ANSI 方法。按照 ANSI 标准,只有在 Pro*C 预编译程序的宿主变量声明区内声明的变量才能做为宿主变量。宿主变量声明区域为 EXEC SQL BEGIN DECLARE SECTION 和 EXEC SQL END DECLARE SECTION 语句之间的区域。b.Oracle 方法 Oracle 对 ANSI 标准进行了扩充,它允许在程序中的任何部分声明宿主变量,
20、所以,当把预编译选项 MODE 设为 ORACLE 时,应用程序不必在指定的声明区域内声明宿主变量。.使用 SQL 语句或 PL/SQL 块参照宿主变量时,必须在宿主变量名称前加冒号,以区别于 Oracle 数据库对象名称。但在 C 语句在使用这些变量时,则不能加冒号.注意:Pro*C 应用程序中不能使用宿主变量提供数据库对象名称,所以,在 CREATE,ALTER 和 DROP 等 DDL 语句中不能使用输入宿主变量。4.9 预编译选项配置文件 Oracle 的预编译选项可以存在不同的文件中,用的时候只要指定某个配置文件就 可以了,如果不指定,Oracle 有一个默认的配置文件,你可以把一些
21、常用的配置 放在这里,默认情况下这个配置文件在$ORACLE_HOME/precomp/admin 下,名为 pcscfg.cfg.一般刚安装的系统,这个文件是空的,自己可以写进去一些自己想 要的配置进去。易初电子有限公司 第 8 页 共 20 页 Oracle Pro*C 编程入门 易初电子有限公司 第 9 页 共 20 页 4.10 伪数据类型 宿主变量数据类型除原有 C 类型外新增三个伪数据类型。它们是:VARCHARn SQL_CURSOR SQL_CONTEXT 4.11 注释 预编译源程序中 C/C+语句的注释方法遵循 C/C+语法规则,可以采用以下两种注释格式:C 语言格式 :/
22、*/C+语言格式 在嵌入式语句中,注释信息只能采用 C 注释格式和 ANSI 格式,ANSI 注释格式是 用(-)做注释符,从注释符到行尾的所有内容为注释信息.4.12 换行.Pro*C 中 嵌入的 SQL 语句若需要换行,可用“”进行换行,但是也可以不用,用“”主要是为了使程序的可读性强一些。4.13 游标的使用。4.14 Oracle 中的游标 Oracle 使用两种游标:显式游标和隐式游标.不管语句返回多少条记录,Oracle 为每条使用的 SQL 语句隐式地定义一个游标.Oracle 为每个 DELETE,UPDATE,INSERT 等SQL命令隐式地声明游标.用户声明并使用显式游标处
23、理SELECT语句返回的多条记录.游标是 ORACLE 和 PRO*C 存放查询结果的工作区域。一个游标(已命名的)与一条 SELECT 语句相关联。操作游标有由 4 条命令:(1)DECLARE CURSOR;(2)OPEN CURSOR;(3)FETCH;(4)CLOSE CURSOR。A.定义游标 一个游标必须首先定义,才能使用它。语法为:EXEC SQL DECLARE 游标名CORSOR FOR SELECT 列 FROM 表 例如:EXEC SQL DECLARE CSOR,CURSOR FOR SELECT ENAME,JOB,SAL FROM EMP WHERE DEPTNO=
24、:DEPTNO;当赋给一个与查询相关联的游标 CURSOR 之后,当 SELECT 查询 EMP 时可从 数据库中返回多行,这些行就是 CURSOR 的一个活动区域。Oracle Pro*C 编程入门 注意:1)定义游标必须在对游标操作之前完成;2)PRO*C 不能引用没有定义的游标;3)游标定义后,其作用范围是整个程序。所以对一个程序来讲,同时定义两个相同的游标是错误的。B.申请游标 在定义游标之后,应用程序在使用游标变量之前,必须首先调用 ALLOCATE 语句 申请游标,也就是为游标变量分配内存区域,ALLOCATE 语法格式为:EXEC SQL ALLOCATE:cursor_vari
25、able;C.打开游标 打开游标的 OPEN 语句主要用来输入主变量的内容,这些主要是 WHERE 中使用 的主变量。打开游标的语句是:EXEC SQL OPEN 游标名 当打开游标后,可以从相关的查询中取出多于一行的结果。所有满足查询标准的 行组成一集合,叫做“游标活动集”。通过取操作,活动集中的每一行或每一组是一 个一个返回的,查询完成后,游标就可关闭了。如图所示:定义游标:DECLARE 开始查询:SELECT 打开游标:OPEN 易初电子有限公司 第 10 页 共 20 页 从活动集取数据:FETCH 查询完成 关闭游标:CLOSE 注意:1)游标处于活动集的第一行前面;2)若改变了输
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle_ProC 编程 入门
限制150内