zoukankan      html  css  js  c++  java
  • 配置ORACLE的PRO*C环境

    1、访问数据库的方法
        在ORACLE数据库管理和系统中,有三种访问数据库的方法;
        ⑴.用SQL*Plus, 它有SQL命令以交互的应用程序访问数据库;
        ⑵.用第四代语言应用开发工具开发的应用程序访问数据库,这些工具有SQL*Froms,QL*Reportwriter,SQL*Menu等;
        ⑶.利用在第三代语言内嵌入的SQL语言或ORACLE库函数调用来访问。
        
            Pro*C就属于第三种开发工具之一, 它把过程化语言C和非过程化语言SQL最完善地结合起来, 具有完备的过程处理能力,又能完成任何数据
        库的处理品任务,使用户可以通过编程完成各种类型的报表。在Pro*C程序中可以嵌入SQL语言,利用这些SQL语言可以完成动态地建立、修改和
        删除数据库中的表,也可以查询、插入、修改和删除数据库表中的行,还可以实现事务的提交和回滚。在Pro*C程序中还可以嵌入PL/SQL块,以
        改进应用程序的性能,特别是在网络环境下,可以减少网络传输和处理的总开销。

    2、编译过程
        Pro*C是oracle的预编译器是一种编程工具,通过它把SQL语句嵌入到C语言程序中,编译过程如下:
        Pro*C源文件(*.pc) -> C源文件(*.c) -> 目标文件(*.o) -> 可执行文件。如图:
        
            预编译器把源程序作为输入,然后翻译程序中嵌入的SQL语句,把它们转化成对标准的ORACLE运行库的调用,最后生成一个修改过的源程序。
        通过对修改过的源程序进行编译、链接,形成可执行文件。

    3、Pro*C头文件和库文件
        如图:

        

    4、Oracle预编译选项配置文件
        默认在$ORACLE_HOME/bin路径下就有了可执行程序PROC以及相应的未经配置预编译环境。Pro*C预编译时的选项很多,可以把它放到一个文件中
        .如果在预编译时不指定配置文件, 则默认配置文件是 $ORACLE_HOME/precomp/admin/pcscfg.cfg
        编辑pcscfg.cfg文件:
            sys_include=(/opt/oracle/precomp/public,/usr/lib/gcc/i386-redhat-linux/4.1.1/include,/usr/lib/i386-redhat-linux4E/include/
            bits,/home/uriel/git-2.0.3/compat/vcbuild/include,/usr/lib/i386-redhat-linux4E/include)
            ltype=short
            
         此文件的sys_include中应包含sqlca.h及sqlda.h所在的路径(否则编译时报:‘sqlca’ 未声明),我这里为/opt/precomp/public。还需要包括
         stddef.h所在的路径,我这里为/usr/lib/gcc/i386-redhat-linux/4.1.1/include。如果这两个文件你也不知道在什么位置,可以通过
            #find / -name "sqlca.h"
            #find / -name "stddef.h"
         来查找。另外再将常用的头文件路径加上即可,如/usr/include。

    5、Oracle预编译选项
        如图:
        

        

        

        
    6、编译过程举例(具体实现可参考makefile博客)
        第一步,对带有嵌入式SQL的C代码程序(通常此程序以.pc结尾,简称PC代码)使用proc做一次预编译,将里面的嵌入式SQL转化为代表数据库功能调用的C代码。
        第二步,使用C编译器将C代码编译连接(其中包含数据库中的库 libclntsh.so)成可执行文件。
        .pc->.c: $proc iname=sample1.pc oname=sample1.c
        .c->.o $cc –c sample1.c
        .o->可执行文件 $cc –L$ORACLE_HOME/lib –lclntsh –o sample1 sample1.o
        
        嵌入式C编译时还需链接-lclntsh库(数据库中的库 libclntsh.so)

  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/uriel/p/4275423.html
Copyright © 2011-2022 走看看