mysql改为oracle要改动的地方:
- 除去limit
①.如果是做分页,直接去掉,用分页插件代替
②.如果是取第一条,用 where ROWNUM = 1 代替
表别名写了as的,要去掉as
SYSDATE() / now() 改成 SYSDATE
where/and条件不能是数字,仅支持boolean, instr函数返回的就是数字, 在后面加上 >0 , =>INSTR(ORG_LINK, #{topOrgId})>0
CONCAT('%',#{noOrName},'%')
改成CONCAT( CONCAT('%',#{noOrName}) ,'%')
或者 ‘%’||#{noOrName}||’%’批量插入/修改时,sql前面加 begin ,结尾处加 end;
不能插空值,估计要加配置
IFNULL 改为 NVl
DATE_FORMAT 原(%Y-%m-%d)改为 TO_CHAR 时间格式: ‘yyyy-MM-dd hh24:mi:ss’
没有find_in_set函数,可以考虑用instr代替
没有GROUP_CONCAT函数,用wm_concat代替
不能使用连表删除/修改,借助 EXISTS 删除 => https://blog.csdn.net/china_shrimp/article/details/78843256
case when中有取字段和自定义时,需要用 Translate(‘根目录’ USING NCHAR_CS) 替换 ‘根目录’ 因为’根目录’ 是varchar2类型,而目前数据中是nvarchar2类型
删除insert语句上的 useGeneratedKeys=“true”
暂时发现 : 如果是select ,语句后面不允许加 " ; "
删除时.删除语句 { DELETE H.* FROM JBP_SERVICE_PROJECT H } 改为 { DELETE FROM JBP_SERVICE_PROJECT H }
Oracle 不会自动将字符串转化成日期,如需插入字符串时间,使用 to_date 函数
Oracle 降序排序时默认会把空值放前面,在order by 后面加上 NULLS LAST , 即可实现与mysql一样