C语言开发过程中,需要对数据库进行操作,使用 Oracle 数据库一般会采用Oracle Pro*C/C++ 预编译器。
本文章参考Oracle官方文档和自我实践,实验环境为 RHEL7 和 Oracle19c,详细介绍 Oracle Pro*C/C++ 预编译器,了解它在开发操作 Oracle 数据的应用程序中的作用,并了解它使您的应用程序能够做什么,具体如使用。
本章介绍Oracle Pro*C/C++代码编译和运行方法。
编译方法
为方便后续开发,在study用户下建立code目录,并将安装包中实例程序的makefile拷贝过来
# 建立开发目录
mkdir /home/study/code
cd /home/study/code
# 拷贝实例程序makefile
cp /home/study/instantclient_19_11/sdk/demo/demo_proc_ic.mk makefile
# 拷贝实例程序demo
cp /home/study/instantclient_19_11/sdk/demo/procdemo.pc demo.pc
# 修改 makefile文件为如下内容
ICSDKHOME=/home/study/instantclient_19_11/sdk/
ICLIBHOME=/home/study/instantclient_19_11/
MAKEFILE=makefile
PROCDEMO=
# 对 demo.pc程序进行编译
make build EXE=demo OBJS=demo.o
这会产生以下结果:
rm -rf SunWS_cachea
make -f makefile PROCFLAGS="" PCCSRC=demo I_SYM=include= pc1
make[1]: 进入目录“/home/study/code”
/home/study/instantclient_19_11/sdk/proc iname=demo
Pro*C/C++: Release 19.0.0.0.0 - Production on Fri Jul 16 19:48:54 2021
Version 19.11.0.0.0
Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved.
System default option values taken from: /home/study/instantclient_19_11/precomp/admin/pcscfg.cfg
make[1]: 离开目录“/home/study/code”
/usr/bin/gcc -O2 -fPIC -DPRECOMP -I/home/study/instantclient_19_11/sdk/include -DLINUX -D_GNU_SOURCE -D_LARGEFILE64_SOURCE=1 -D_LARGEFILE_SOURCE=1 -DSLTS_ENABLE -DSLMXMX_ENABLE -D_REENTRANT -DNS_THREADS -c demo.c
/usr/bin/gcc -o demo demo.o -g -L/home/study/instantclient_19_11/ -lclntsh -ldl -lm -lpthread
网络服务配置
在/home/study/instantclient_19_11目录下新建一个tnsnames.ora文件。
在该文件中配置连接字符串,这个字符串的配置规范可以参考完整版的配置规范。
配置文档内容如下:
#Generated by Oracle configuration tools
ORCL=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = XXX.XXX.XXX.XXX)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
说明:以下根据情况修改
HOST 数据库地址
PORT 数据库监听端口
ORCL 为数据库服务名
运行方法
# 运行编译后demo程序
./demo
这会产生以下结果:
Connected to ORACLE as user: scott
The company's salespeople are--
Salesperson Salary Commission
----------- ------ ----------
ALLEN 1600.00 300.00
WARD 1250.00 500.00
MARTIN 1250.00 1400.00
TURNER 1500.00 0.00
GOOD-BYE!!