本文内容来自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7488285.html?templateId=1718516
背景
OCI 是Oracle调用接口(Oracle Call Interface 简称OCI) 提供了一组对Oracle数据库进行存取的接口子例程(函数),通过在第三方设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。
崖山数据库基于Oracle的OCI接口,开发了强兼容的接口,应用可以做比较少的改动,平滑地迁移到崖山数据库。
主要优点
1、Oracle数据库服务器特性中的即时可用性
2、企业级的性能和可伸缩性
3、强健的安全模型
4、在所有运行Oracle的平台上的可移植性。
本文将介绍cmake 方式编译崖山数据库,帮助读者快速上手崖山数据库的OCI接口,并在使用OCI解决实际工作遇到的问题。
环境准备
1、配置yashandb的C驱动 和 OCI 文件
2、准备Oracle的OCI软件包,需要下载两个:
其一是instantclient-basic-linux.x64-21.14.0.0.0dbru.zip,
其二是instantclient-sdk-linux.x64-21.14.0.0.0dbru.zip
3、机器提前安装GDB和CMAKE工具
如何编译yashandb的OCI代码?
接下来,以官网OCI示例代码为例,快速上手编译Yashandb的OCI代码
准备编译前命令
编辑 CMakeList.txt,它是CMAKE工程编译的声明命令文件
点击查看代码[yashan103@localhost oci_dir]$ cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
# CMAKE的工程名
project(YAS_OCI_TEST)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(BUILD_USE_64BITS on)
set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "" FORCE)
#设置OCI接口的源代码路径
SET(LIBHELLO_SRC
./bb.c
)
#查找库文件
find_library(YAS_OCI_LIBRARY NAMES yas_oci PATHS /home/yashan103/oci_lib/yashandb-oci-23.2.1.100-4-gecc0e02-linux-x86_64)
#确认库文件是否找到
if(NOT YAS_OCI_LIBRARY)
message(FATAL_ERROR "Could not find libyas_oci.so")
endif()
# 添加OCI.h的头文件
include_directories(/home/yashan103/instantclient_21_12/sdk/include)
##执行编译操作
add_executable(YAS_OCI_TEST ${LIBHELLO_SRC})
##添加OCI的yashandb依赖文件
target_link_libraries(YAS_OCI_TEST ${YAS_OCI_LIBRARY})
[yashan103@localhost oci_dir]$
[yashan103@localhost oci_dir]$
[yashan103@localhost oci_dir]$ cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
# CMAKE的工程名
project(YAS_OCI_TEST)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(BUILD_USE_64BITS on)
set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "" FORCE)
#设置OCI接口的源代码路径
SET(LIBHELLO_SRC
./bb.c
)
#查找库文件
find_library(YAS_OCI_LIBRARY NAMES yas_oci PATHS /home/yashan103/oci_lib/yashandb-oci-23.2.1.100-4-gecc0e02-linux-x86_64)
#确认库文件是否找到
if(NOT YAS_OCI_LIBRARY)
message(FATAL_ERROR "Could not find libyas_oci.so")
endif()
# 添加OCI.h的头文件
include_directories(/home/yashan103/instantclient_21_12/sdk/include)
##执行编译操作
add_executable(YAS_OCI_TEST ${LIBHELLO_SRC})
##添加OCI的yashandb依赖文件
target_link_libraries(YAS_OCI_TEST ${YAS_OCI_LIBRARY})
准备Oracle的依赖文件 点击查看代码
[yashan103@localhost instantclient_21_12]$ ll
total 272500
-rwxr-xr-x. 1 yashan103 yashan103 42192 Dec 21 2023 adrci
-rw-r--r--. 1 yashan103 yashan103 5780 Dec 21 2023 BASIC_LICENSE
-rw-r--r--. 1 yashan103 yashan103 1634 Dec 21 2023 BASIC_README
drwxrwxr-x. 2 yashan103 yashan103 55 Apr 1 10:46 bin
-rwxr-xr-x. 1 yashan103 yashan103 59544 Dec 21 2023 genezi
drwxrwxr-x. 2 yashan103 yashan103 6 Aug 5 21:38 include
drwxrwxr-x. 2 yashan103 yashan103 6 Aug 5 21:38 lib
lrwxrwxrwx. 1 yashan103 yashan103 21 Jul 23 11:22 libclntshcore.so -> libclntshcore.so.21.1
lrwxrwxrwx. 1 yashan103 yashan103 21 Jul 23 11:22 libclntshcore.so.12.1 -> libclntshcore.so.21.1
lrwxrwxrwx. 1 yashan103 yashan103 21 Jul 23 11:22 libclntshcore.so.18.1 -> libclntshcore.so.21.1
lrwxrwxrwx. 1 yashan103 yashan103 21 Jul 23 11:22 libclntshcore.so.19.1 -> libclntshcore.so.21.1
lrwxrwxrwx. 1 yashan103 yashan103 21 Jul 23 11:22 libclntshco