由于目前主要工作在**,**项目使用的数据库为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