使用occi为oracle db编写udf时出错

时间:2017-05-12 15:43:43

标签: c++ oracle oracle11g

我正在尝试使用头文件occi.h编译一个cpp代码我正在使用的代码是 `

#include <iostream>
#include <occi.h>

using namespace std;

int main(){

    oracle::occi::Environment* environment;
    oracle::occi::Connection *con;
    oracle::occi::Statement* stmt;
    oracle::occi::ResultSet* res;

    try
    {

        environment = oracle::occi::Environment::createEnvironment(oracle::occi::Environment::DEFAULT);
        con = environment->createConnection("sys", "root","xe");

        stmt = con->createStatement("select * from customers");
        res = stmt->executeQuery();

        while (res->next())
         std::cout<<res->getInt(1)<<"  "<<res->getString(2)<<std::endl;

        stmt->closeResultSet(res);
        con->terminateStatement(stmt);
        environment->terminateConnection(con);

    }catch(oracle::occi::SQLException &e){
        std::cout<<e.what();
    }

    return 0;
}`

运行以下命令时出现以下错误: - g ++ -I / root / instantclient_11_2 / sdk / include -L $ ORACLE_HOME / lib:/ root / Shared / instantclient_11_2_lib / -L $ ORACLE_HOME / rdbms / lib cpp_db_conn.cpp

错误: - /tmp/ccjcKsxz.o:在函数main': udf.cpp:(.text+0x26): undefined reference to oracle :: occi :: Environment :: createEnvironment(oracle :: occi :: Environment :: Mode,void *,void *()(void ,unsigned long),void *()(void ,void *,unsigned long),void()(void ,void *))&#39; /tmp/ccjcKsxz.o:(.gcc_except_table+0x80):对于oracle :: occi :: SQLException的#typeinfo的未定义引用&#39; collect2:ld返回1退出状态

2 个答案:

答案 0 :(得分:0)

oracle :: occi :: Connection |为什么这里有空格??? | * |而不是这里??? | con;

答案 1 :(得分:0)

我可以告诉你我的情况。 显然,这是一个有点不匹配的问题。

我的环境是'Microsoft SDK v7.0',默认为64位编译器

不幸的是,我的oracle客户端是32位,其版本是instantclient-basic-nt-12.1.0.2.0。

我和你的错误一样。

因此,我将编译器更改为32位。

setenv /x86

然后,所有问题都消失了。

祝你有个美好的一天。