Oracle Pro*C/C++ (三):代码编译和运行

952 阅读2分钟

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!!