达梦切换oracle

1.CHAR型更改为VARCHAR型

踩坑:数据库中直接执行sql能查询到数据,但是通过程序无法查询到。

原因:查询条件中有字段为CHAR型,比如CHAR(10),但是我输入的条件不足10位,就会自动补全

所以把这个CHAR(10)更改为VARCHAR(10)

相关博客

https://www.cnblogs.com/acme6/p/9549902.html

2.trim()

上一个问题  我本来的解决方式是使用trim

比如原来的sql是

select * from table_name where  column=#{column}  

我改成了 

select * from table_name where trim(column)=#{column} 

这样是能查询出来,本以为问题解决,但是领导提醒我,trim()不走索引

我查了一下,说是trim()会全表扫描

所以才把字段类型char改为varchar

但是迁移数据时候需要注意:我是从达梦往oracle迁移,由于达梦中数据类型还是char,所以我需要在迁移之后,对oracle中的数据进行trim

UPDATE TABLE_NAME SET COLUMN=TRIM(COLUMN);

3.VACHAR类型长度加长

遇到迁移数据时,含有中文的字段报长度不够的问题

我们dba告诉我现在达梦是按照字符存储,ORACLE是按照字节存储,编码是UTF-8

根据UTF-8编码下,一个汉字占用3个字节,所以我把中文字段都加大到长度乘以三

可参考

https://blog.csdn.net/bobozai86/article/details/106888614

4.过长的Varchar改为clob

超过VARCHAR(4000)的,字段类型都改为CLOB

因为oracle的varchar最长也就4000

5.避免对clob进行distinct

oracle 10+g不支持对类型为CLOB的列进行distinct

6.建表时,表和字段全大写

不大写,查询时候就需要加双引号,否则就会报表和视图不存在错误

如果全大写,查询的时候使用的sql,大小写就无所谓了

有一个比较快的方法,就是使用notepad++,选中建表sql,直接改为全大写

7.*要具体

多表关联时,或者结果集中需要查询其他字段时,*要具体指出这是哪张表的*

不具体,直接*时

改为这是哪张表的*后

或者,你直接把列名都复制出来,把*去掉,也行

8.涉及到排序的字段需要是数字,而不能是字符串

看箭头指向的地方,之前我写的是'0',就会报错:期望是int但是得到了string  

改为数字0后,达梦和oracle执行都通过

9.在Oracle里,表的别名不能用as,列的别名可以用as

https://blog.csdn.net/qichangjian/article/details/91381808

我的解决方式直接把表的as去掉

10.DM管理工具的使用

由于一直使用navicat,习惯了点击运行就直接提交。

但是达梦不是啊,运行是运行,提交是提交,除非selet类型的sql,直接点击运行就把数据给你查出来了

如果你有删除更新等操作,点击运行之后再点击提交才会对数据进行操作

或者直接在sql后边加上commit 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值