ORACLE支持几种高级语言中内嵌入SQL语句,或ORACLE库函数调用来访问数据库。它们是C,COBOL,Ada,PASCAL,PL/I等,这些语言称之为宿主语言,用它们开发的程序就称为PRO* 程序,如PRO*C,PRO*COBOL等。
PROC在ORACLE的客户端软件中就有,安装oracle时选上即可。
在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程序
1、PRO*C:
ORACLE数据库作为数据库产品中的佼佼者,应用十分广泛,随着对其应用的深入,使用ORACLE和C来编制应用系统成为许多系统的选择,而ORACLE和C语言的接口知识成为应该掌握的和十分有用的。
PRO*C是ORACLE的预编译器是一种编程工具,通过它把SQL语句嵌入到C语言程序中。如图:
预编译器把源程序作为输入,然后翻译程序中嵌入的 SQL语句,把它们转化成对标准的ORACLE运行库的调用,最后生成一个修改过的源程序。通过对修改过的源程序进行编译、链接,形成可执行文件。
2、环境配置:
A、说明:
ORACLE预编译器在ORACLE 8I安装时是默认或选择安装的,安装了PRO*C,则在$ORACLE_HOME/bin路径下就有了可执行程序PROC,以及相应的未经配置预编译环境。为使PRO*C预编译器能工作我们还必须对环境做一些配置。
ORACLE的PRO*C是对预编译器的选项值的改变来配置环境的。预编译指令基本格式如下:
Proc 选项名=选项值 源文件
也可把选项值的改变放到CONFIG指定的文件中做。
PROC的选项
auto_connect |
允许自动连接到 ops$ 帐号 |
char_map |
正在映射字符数组和字符串 |
Close_on_commit |
关闭所有 COMMIT 游标 |
codekr_c |
将要生成的代码类型 |
Comp_charset |
C 编译器支持的字符集类型 |
Config |
用另一配置文件覆盖系统配置文件 |
Cpp_suffix |
覆盖缺省的 C++ 文件名后缀 |
dbmsnative |
兼容模式 |
Def_sqlcode |
生成 '#define SQLCODE sqlca.sqlcode' 宏 |
Define |
定义预处理器符号 |
Durationtransaction |
设置高速缓存中对象的 pin 持续时间 |
Dynamic |
指定 Oracle 或 ANSI 动态 SQL 语义 |
Errors |
是否将错误消息发送到终端 |
Errtype |
输入文件的列表文件名称错误 |
Fips |
ANSI 的 FIPS 标志不符合用法 |
Header |
为预编译标题指定文件扩展名 |
hold_cursor |
在游标高速缓存中控制游标保留 |
iname |
输入文件的名称 |
Include |
包括文件的目录路径 |
Intype |
有关类型信息的输入文件名称 |
Lines |
将 #line 指令添加到生成的代码中 |
Lname |
覆盖缺省列表文件名 |
Ltype |
列表文件中生成的数据量 |
maxliteral |
生成的文字串的最大长度 |
maxopencursors |
高速缓存的开放游标的最大数量 |
mode |
代码符合 Oracle 或 ANSI 规则 |
Nls_char |
指定国家语言字符变量 |
Nls_local |
控制 NLS 字符语义的实现方法 |
Objects |
支持对象类型 |
oname |
输出文件名 |
oraca |
控制 ORACA 的使用 |
Pagelen |
列表文件页面长度 |
parse |
控制进行语法分析的非 SQL 代码 |
prefetch |
游标 OPEN 期间预读取的行数 |
Release_cursor |
控制从游标高速缓存中释放游标 |
Select_error |
控制选择标记错误 |
sqlcheck |
编译时间 SQL 校验总量 |
Sys_include |
系统标题文件所在目录 |
Threads |
指示多线程应用程序 |
type_code |
将 Oracle 或 ANSI 类型代码用于动态 SQL |
Unsafe_null |
允许在没有指示变量的情况下进行> NULL 读取 |
Userid |
用户名/口令 [@dbname] 连接串 |
Varchar |
允许使用隐式 varchar 结构 |
Version |
将要返回的对象版本 |
大部分选项我们都可以用默认值,但其中有几个选项是需要配置的。
l CONFIG:指定PROC的CONFIG文件。PROC默认配置文件为$ORACLE_HOME/precomp/admin/pcscfg.cfg,我们可以编辑我们要使用的CONFIG文件。
l INCLUDE:包括文件的目录路径,一般在CONFIG文件中配置,pcscfg.cfg中有默认定义。
l SYS_INCLUDE:系统头文件所在目录,一般在CONFIG文件中配置,pcscfg.cfg中有默认定义。但要注意可能默认的系统头文件的路径不对。如
sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include)
lUSERID:用户名/口令 [@dbname] 连接串
B、配置:
配置工作比较简单,只要将默认的>CONFIG文件COPY到源程序所在的路径下,修改其中的USERID。
使用如下命令对PROC源文件进行预编译,输出相应的C源程序。
Proc config=myconfg.cfg iname=myprog.pc oname=myprog.c
PRO*C将对INAME指定的PROC源文件进行预编译,输出ONAME指定的文件。
3、联编环境:
预编译只是将PROC源文预编译成C源文件,而要将不同源文件编译生成的目标文件联编,则要指定联编所需要的LIBRARY,ORACLE接口程序(PROC程序)需要的the client shared library分布在许多路径下,为联编方便,ORACLE提供了$ORACLE_HOME/precomp/demo/proc/demo_proc.mk文件。
使用如下命令:
make–f demo_proc.mk OBJS=”myporg.o mydb.o” EXE=myprog.e build