最近在做數據庫從sybase到oracle的遷移工作,sybase數據庫表bcp導出后,通過sqlldr導入到oracle數據庫,然后oracle數據庫通過spool按照sybase數據庫bcp的格式導出,進行比對,看兩邊的文件是否一樣。但是出現了一個問題,導致兩邊的文件不一樣,什么問題了,因為某些表中的某些字段中存在換行符,在sybase中bcp導出時,為一行,oracle數據庫spool導出為兩行,導致最后用comm -3比較的時候兩邊文件不一樣。那么查詢字段中的值是否有換行符呢?
1. sybase查詢表中字段是否有換行符的方法
--sybase數據庫中 ,char(10)表示換行,char(13)表示回車
select * from tsysparameter where c_valuebound like '%'||char(10)||'%' ; 或者: select * from tsysparameter where charindex(char(10),c_valuebound) > 0; 注意:charindex是前面字符在后面字符是否存在,存在大於0;
也就是說在sybase數據庫中用char(10)表示換行符,用char(13)表示回車。
2. oracle數據庫查詢表中字段是否有換行符的方法:
--oracle數據庫中 ,chr(10)表示換行,chr(13)表示回車
select * from tsysparameter where c_valuebound like '%'||chr(10)||'%' ; 或者: select * from tsysparameter where instr(c_valuebound,chr(10))>0;
也就是說在oracle數據庫中用chr(10)表示換行符,用chr(13)表示回車。
3.sybase 和oracle數據庫更新字段中換行符的方法:
-sybase update tsysparamester set c_valuebound=str_replace(c_valuebound,char(10),'') where charindex(char(10),c_valuebound) >0; --oracle
update tsysparamester set c_valuebound=replace(c_valuebound,chr(10),'') where instr(c_valuebound,chr(10)) >0;