I’m trying to extend the DuckDB extension template to connect to Oracle
I’ve downloaded the Oracle SDK and configured CMakesLists.txt :
# Specify the path to the Oracle Instant Client
set(ORACLE_INSTANT_CLIENT_DIR "${CMAKE_CURRENT_LIST_DIR}/src/instantclient_23_4")
# Add include directories
include_directories(${ORACLE_INSTANT_CLIENT_DIR}/sdk/include)
# Find the OCCI and OCI libraries
find_library(OCI_LIB oci PATHS ${ORACLE_INSTANT_CLIENT_DIR}/sdk/lib)
if(NOT OCI_LIB)
message(FATAL_ERROR "oci.lib not found in ${ORACLE_INSTANT_CLIENT_DIR}/sdk/lib")
endif()
# Link the libraries
target_link_libraries(${EXTENSION_NAME} ${OCI_LIB})
I modified the template entry point to connect:
#include <occi.h>
// ...
inline void OracleScannerScalarFun(DataChunk &args, ExpressionState &state, Vector &result)
{
auto &user_vector = args.data[0];
auto &password_vector = args.data[1];
auto &db_vector = args.data[2];
auto &query_vector = args.data[3];
oracle::occi::Environment *env = oracle::occi::Environment::createEnvironment(oracle::occi::Environment::DEFAULT);
oracle::occi::Connection *conn = env->createConnection(user_vector.ToString(), password_vector.ToString(), db_vector.ToString());
UnaryExecutor::Execute<string_t, string_t>(
user_vector, result, args.size(),
[&](string_t name)
{
return StringVector::AddString(result, "ok");
;
});
}
Building returns a linker error:
oracle_scanner_extension.lib(oracle_scanner_extension.obj) : error
LNK2019: unresolved external sym bol “public: static class
oracle::occi::Environment * __cdecl
oracle::occi::Environment::createEnvi ronment(enum
oracle::occi::Environment::Mode,void ,void * (__cdecl)(void
,unsigned __int64),void * (__cdecl)(void *,void ,unsigned __int64),void (__cdecl)(void *,void *))” (?createEnvironment@ Environment@occi@oracle@@SAPEAV123@W4Mode@123@PEAXP6APEAX1_K@ZP6APEAX112@ZP6AX11@Z@Z)
referenced in function “void __cdecl
duckdb::OracleScannerScalarFun(class duckdb::DataChunk &,struct
duckdb::Exp ressionState &,class duckdb::Vector &)”
(?OracleScannerScalarFun@duckdb@@YAXAEAVDataChunk@1@AEAUExp
ressionState@1@AEAVVector@1@@Z)
[G:projectsoracle_scannerbuildreleaseextensionparquetparquet
loadable_extension.vcxproj] G:projectsoracle_scannerbuildreleaseextensionparquetparquet.duckdb_extension
: fatal error L NK1120: 1 unresolved externals
[G:projectsoracle_scannerbuildreleaseextensionparquetparquet
loadable_extension.vcxproj]
What else must I do to link the oracle SDK, besides the CMakeLists.txt?