sqlserver脚本转oracle常见问题注意

由于目前主要工作在**,**项目使用的数据库为oracle数据库,在平时代码改造和数据库操作时会有很多sql语句的编写,发现了几点小问题与大家分享一下。

1、!="哈哈"

经常看到sqlserver中的sql语句这样写,但是oracle数据库中会导致你这个查询语句会找不到所有此字段为null的值。需要注意的就是 Oracle 中的 null 不能用 =及!=用来比较 ,只能使用is null 或者 is not null,
当字段中有null时,需要区别对待。
说明:
1、等价于没有任何值、是未知数。
2、NULL与0、空字符串、空格都不同。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、NULL的处理使用NVL函数。
5、比较时使用关键字用“is null”和“is not null”。
6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,count(*)中,用nvl(列名,0)处理后再查。
7、排序时比其他数据都大(索引默认是降序排列,小→大),所以NULL值总是排在最后。

所以基本上使用这种判断的时候,最好使用NVL函数去做一个转换,然后判断。

2、ntext

对于类型ntext的字段,在数据库插入语句时,sqlserver常常使用DB.string类型,有时候迁移代码,也会发现oracle版本的写法也是这样写,但是这样的写法会有问题的。

例如ATTRINFO字段为ntext类型,

db.AddInParameter(cmd, "ATTRINFO", DbType.String, userArea.ATTRINFO);

这种写法在sqlserver数据库不会出现问题,但是oracle数据库的话会出现异常,我这边从网上找到的写法为:

OracleParameter op1 = new OracleParameter("ATTRINFO", OracleType.NClob);//申请材料
                if (!string.IsNullOrEmpty(userArea.ATTRINFO))
                {
                    op1.Value=userArea.ATTRINFO;
                }
                else
                {
                    op1.Value = " ";
                }
                cmd.Parameters.Add(op1);

3、其他

有时候脚本从mis平台导出,执行时会出现异常,发现异常基本上有如下几点:

1、索引、触发器、表名过长

这个也仅仅是出现在老版本的oracle数据库,目前最新的数据库应该已经修复,这些名称应该需要名称字段小于30长度

2、特殊名称

例如有个时间字段起名Date

执行脚本:

ALTER TABLE SQB_FDCJJJGJQFZJG add DATE date  null会出现异常

正确写法:

ALTER TABLE SQB_FDCJJJGJQFZJG add "DATE" date  null

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值