基于OCCI访问Oracle的记录
我在oracle 9i的环境下开发了occi的应用,结果放到10g(10.2.0.3)服务器上运行不了(只装了windows 版的10g服务端),只好把所有依赖的9i的dll拷过去,结果连接occi报错:
Error while trying to retrieve text for error ORA-32101
到http://www.oracle.com/technology/global/cn/software/tech/oci/instantclient/index.html下载一个即时客户端10g(10.2.0.3)
安装并设置instantclient(解压缩到C盘,设置path和TMS_ADMIN等环境变量),还是ORA-32101错误(而且导致原来其他基于ODBC访问oracle的应用也会报错了:internal error -
unable to initialize NLS during driver load.)
Google之,说要设置环境变量,添加ORACLE_HOME=c:\oracle\product\10.1.0\em_1,报错改变:ORA-12538: TNS:no such protocol adapter
再Google之,有高人提到:
10g的occi库对应不同的vc有不同的库文件(在http://www.oracle.com/technology/tech/oci/occi/occidownloads.html可下载vc8的库,在instantclient sdk包里有vc7,vc71的
库,oracle服务端安装后也有默认的oci的库),但我下在的10g(10.2.0.3) instantclient里面只有vc7,vc71的库,就是没有vc6的!!
如果直接用oracle 10g(10.2.0.3)服务端自带的occi库(在C:\oracle\product\10.1.0\db_1\OCI\lib\MSVC\),结果运行时
try{
env = Environment::createEnvironment (Environment::DEFAULT);
conn = env->createConnection (user, passwd, db);
}catch(SQLException ex)
{
errS = (ex.getMessage()).c_str();
errCode = ex.getErrorCode();
}
运行到这一句errS = ex.getMessage();会异常!这应该是由于10g occi用的string和vc6 的 string不兼容造成的。
改成errS = ex.getMessage().c_str();后可以看见获得的错误描述:
ORA-24960: 属性 OCI_ATTR_USERNAME 的长度大于最大允许长度 255
后来才发现10.1.0.5版本的10g的instantclient sdk才有支持vc6的库(10.2.0.3以后就没有了),用这个替换10.2.0.3的库,编译完成,再将instantclient里面的oci.dll及vc6
下面的oraocci10.dll放到执行文件
相关文档:
oracle表空间操作详解
1
2
3作者: 来源: 更新日期:2006-01-04
5
6
7建立表空间
8
9CREATE TABLESPACE data01
10DATAFILE '/ora ......
问题提出:
一个高级SQL语句问题
假设有一张表,有这样一些数据
a b
1 2
0 2
2 3
3 4
4
5 6
6 7
12 7
7
a是子节点 b是父节点 ,如果b为null 则为一棵树的根节点
根据A与B的这个关系 找出一棵树的结构显示出来 ,并显示出每个节点在书中的层级,将树的结构打 ......
ORACLE 数据库设计(定义约束 外键约束)
外键约束保证参照完整性。外键约束限定了一个列的取值范围。一个例子就是限定州名缩写在一个有限值集合中,这个值集合是另外一个控制结构——一张父表
下面我们创建一张参照表,它提供了完整的州缩写列表,然后使用参照完整性确保学生们有正确的州缩写。第一张表是州参 ......
之前我也有談論過.net中對不同數據庫的連接操作,這次單談談Oracle,其實你要連接到Oracle數據庫是要要求有個Oracle.DataAccess.dll。可以到Oracle網站下載。如果你安裝了Oracle了,也 ......