打造ubuntu下精简版的oracle客户端及pro*c编译环境

时间:2022-06-23 09:17:18
  1. oracle的pro*c简介
  2. 安装oracle客户端
  3. 安装sqlpus
  4. 安装pro*c

  ORACLE的PRO*C曾经很流行,虽然现在不被推崇,但是已经比较成熟项目依然使用,所以打造自己的pro*c编译环境还是有意义的。现在网上搜一下,可能还可以找得到windows下面的pro*c编译环境,但是linux下基本上没有,当然你愿意啃E文的话,可能还是有一些的,但是大部分都只能通过介绍oracle 9i的安装来获得我们需要的pro*c编译环境,如果只是单纯想安装pro*c,那是没有的,所以才想到写下来记录一下。

  在linux安装orace 9i是很麻烦的事情,首先,按照官方的说法,oracle是只支持red hat的,虽然服务器大部分都是,但我想作为开发人员,肯定用的发行版都是五花八门了。总体而言,在ubuntu下安装oracle9i主要存在这几点麻烦:1.需要打补丁,而且补丁也难下;2.安装时中文不支持;3.为了这个功能要装这个庞然大物;4.部分动态链接库很老的版本不好找;5.oracle9i的安装光盘实在不好拿到;6.安装时间好长。

  首先,当然是到oracle的网站下载文件了,下面是地址 http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html。我们主要要安装这几个,oracle精简客户端,sqlplus以及pro*c。所以要分别下载这几个文件instantclient-basic-linux32-11.1.0.7.zip,instantclient-sqlplus-linux32-11.1.0.7.zip,instantclient-precomp-linux32-11.1.0.7.zip。

  现在安装oracle精简客户端及sqlplus。首先创建目录并解压文件,如下:

$ cd /opt
$ sudo mkdir oracle
$ unzip instantclient-basic-linux32-11.1.0.7.zip
$ unzip instantclient-sqlplus-linux32-11.1.0.7.zip

编辑一下主目录下.bash_profile设置几个环境变量

打造ubuntu下精简版的oracle客户端及pro*c编译环境export ORACLE_HOME=$ORACLE_BASE/instantclient_11_1
打造ubuntu下精简版的oracle客户端及pro*c编译环境export LD_LIBRARY_PATH=$ORACLE_HOME:${LD_LIBRARY_PATH}
打造ubuntu下精简版的oracle客户端及pro*c编译环境export PATH=$ORACLE_HOME:$ORACLE_HOME/sdk:$PATH
打造ubuntu下精简版的oracle客户端及pro*c编译环境export NLS_LANG=AMERICAN_AMERICA.UTF8

将找个要用的服务名tnsnames.ora拷到相应路径下,像我的是/opt/oracle/instantclient_11_1/network/admin,没有目录则新建

加载一下环境变量

$. ~/.bash_profile

还要安装一下aio库还要将oracle的路径加进ld.conf

$sudo apt-get install libaio1

$sudo vi /etc/ld.so.conf.d/ora.conf

/opt/oracle/instantclient_11_1/

更新一下

$ldconfig   -v

应该可以了

$sqlplus user@service_name/password

打造ubuntu下精简版的oracle客户端及pro*c编译环境

 

现在开始安装pro*c了。

将instantclient-precomp-linux32-11.1.0.7.zip解压到$ORACLE_HOME

并在该目录下新建子目录precomp/admin,移动pcscfg.cfg到该目录下并编辑相应的头文件位置

sys_include=(/opt/oracle/instantclient_11_1/sdk/include,/usr/include,/usr/include/linux)
ltype=short

再新建子目录lib

$sudo mkdir lib

$cd lib

$sudo ln -s libclntsh.so /opt/oracle/instantclient_11_1/libclntsh.so.11.1

写个helloworld验证一下我们的pro*c能不能用了。。

打造ubuntu下精简版的oracle客户端及pro*c编译环境#include  < stdio.h >
打造ubuntu下精简版的oracle客户端及pro*c编译环境#include 
< stdlib.h >
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境EXEC SQL INCLUDE sqlca;
打造ubuntu下精简版的oracle客户端及pro*c编译环境EXEC SQL INCLUDE oraca;
打造ubuntu下精简版的oracle客户端及pro*c编译环境EXEC ORACLE OPTION(ORACA
= YES);
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境EXEC SQL BEGIN DECLARE SECTION;
打造ubuntu下精简版的oracle客户端及pro*c编译环境        VARCHAR v_username[
20 ];
打造ubuntu下精简版的oracle客户端及pro*c编译环境        VARCHAR v_password[
20 ];
打造ubuntu下精简版的oracle客户端及pro*c编译环境EXEC SQL END    DECLARE SECTION;
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境
void  sqlerror();
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境打造ubuntu下精简版的oracle客户端及pro*c编译环境
int  main() {
打造ubuntu下精简版的oracle客户端及pro*c编译环境        v_username.len 
= sprintf(v_username.arr,"tpibs@ywdev");
打造ubuntu下精简版的oracle客户端及pro*c编译环境        v_password.len 
= sprintf(v_password.arr,"tppw123");
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境        EXEC SQL WHENEVER SQLERROR DO sqlerror();
打造ubuntu下精简版的oracle客户端及pro*c编译环境        EXEC SQL CONNECT :v_username IDENTIFIED BY :v_password;
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境        printf(
"\nconn ORACLE ,user:%s\n",v_username.arr);
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境        EXEC SQL COMMIT WORK RELEASE;
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境        
return 0;
打造ubuntu下精简版的oracle客户端及pro*c编译环境}

打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境打造ubuntu下精简版的oracle客户端及pro*c编译环境
void  sqlerror() {
打造ubuntu下精简版的oracle客户端及pro*c编译环境        EXEC SQL WHENEVER SQLERROR CONTINUE;
打造ubuntu下精简版的oracle客户端及pro*c编译环境        printf(
"\nORACLE error detected:\n");
打造ubuntu下精简版的oracle客户端及pro*c编译环境        printf(
"\n%.70s\n",sqlca.sqlerrm.sqlerrmc);
打造ubuntu下精简版的oracle客户端及pro*c编译环境        Exec sql rollback RELEASE;
打造ubuntu下精简版的oracle客户端及pro*c编译环境}

再写个简单的makefile

 

打造ubuntu下精简版的oracle客户端及pro*c编译环境TARGET   =  hello
打造ubuntu下精简版的oracle客户端及pro*c编译环境SRCS    
=  main . c
打造ubuntu下精简版的oracle客户端及pro*c编译环境OBJS    
=  main . o
打造ubuntu下精简版的oracle客户端及pro*c编译环境COMMLIB 
=   - lpthread  - lclntsh
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境LINKER  
=  $(CC)
打造ubuntu下精简版的oracle客户端及pro*c编译环境RM      
=   / bin / rm  - f
打造ubuntu下精简版的oracle客户端及pro*c编译环境PROC    
=  proc
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境PROCFLAGS 
=  code = ANSI_C ireclen = 2048  oreclen = 2048  parse = none include =/ usr / include \
打造ubuntu下精简版的oracle客户端及pro*c编译环境    include
=/ usr / include / linux \
打造ubuntu下精简版的oracle客户端及pro*c编译环境    include
=/ usr / local / include \
打造ubuntu下精简版的oracle客户端及pro*c编译环境    include
=/ usr / lib / gcc / i486 - linux - gnu / 4.3 . 3 / include
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境CFLAGS  
=   - I$(ORACLE_HOME) / precomp / public \
打造ubuntu下精简版的oracle客户端及pro*c编译环境          
- L$(ORACLE_HOME) / lib
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境
. SUFFIXES :   . . . pc
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境
. c . o :
打造ubuntu下精简版的oracle客户端及pro*c编译环境        $(CC) 
- c $(CFLAGS) $ <
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境
. pc . c :
打造ubuntu下精简版的oracle客户端及pro*c编译环境        
@echo   " PROC 打造ubuntu下精简版的oracle客户端及pro*c编译环境. "
打造ubuntu下精简版的oracle客户端及pro*c编译环境        
- $(PROC) iname = $ *. pc $(PROCFLAGS)
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境$(TARGET)
:  $(SRCS) $(OBJS)
打造ubuntu下精简版的oracle客户端及pro*c编译环境        $(CC) 
- o $@ $(OBJS) $(CFLAGS) $(COMMLIB)
打造ubuntu下精简版的oracle客户端及pro*c编译环境
打造ubuntu下精简版的oracle客户端及pro*c编译环境clean 
:
打造ubuntu下精简版的oracle客户端及pro*c编译环境        $(RM) $(TARGET) $(OBJS) $(TARGET
:%=%. c)

 

$ make 
./ hello

conn ORACLE 
, user : tpibs @ywdev