1、与Oracle自身关键字冲突的列名无法直接使用,需要加双引号使用。例如UID,Oracle的内置UID是当前Session连接用户的ID。

2、SQLServer和Oracle的OID格式是不同的
sOID = “{00013885-0000-0000-5502-A9E71C556B04}” for MSSQL
sOID = “0002231100000000060193593655DC01” for Oracle
MSSQL在数据库中存储的格式没有大括号,因此如果你用查询语句直接从数据库中得到的OID,在转BO时需要手动加上{},而Oracle中存储的格式无需做任何处理,可以直接用来转BO。至于为什么他们两者存储的格式有所不同,就要追溯到两者生成GUID的函数,Oracle那边是SYS_GUID(),MSSQL这边叫NewID(),生成的是两种不同不同格式化的GUID,在代码里有个Guid.ToString()的格式化方法,如下图,大家可以大致了解GUID的几种格式:

但Oracle生成的GUID是16位的RAW格式,这种格式在某些软件中是无法直接显示的,会乱码或空,所以有时我们需要通过ROWTOHEX函数将其转换为16进制的32位字符串才能正常使用和显示。

3、代码的查询语句里如果有中文,则需要注意要在系统变量中添加一个东西:
变量名:NLS_LANG
变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK


4、S3D在Oracle和MSSQL里的View不一定一致,有些没有,有些名字不一样的,很正常,要多查一下。

5、语法方面的差异就更多了,每段查询几乎都要写两种。

6、DBConnection要先判断DBProvider再创建,如果你在连MSSQL站点的时候创建Oracle的DBConnection,或连Oracle站点的时候创建MSSQL的DBConnection,程序会崩。

7、有些语句在代码里始终查询不出结果,但在Toad或PL/SQL或Developer中单独运行又能出结果,原因至今未找到。

鉴于以上种种问题,可以得出一个结论,在写代码时能不直连数据库进行查询就尽量不要去直连。尽量通过前台封装的API去实现功能,会大大降低程序的维护成本。

转自:https://www.modb.pro/db/112838

最后修改:2021 年 10 月 01 日
如果觉得我的文章对你有用,请随意赞赏