Oracle常见语法错误

【参考文章】:java.sql.SQLSyntaxErrorException: ORA-00909: 参数个数无效

【参考文章】:Oracle Concat()函数

【参考文章】:MySQL concat()函数

【参考文章】:MyBatis Oracle批量插入数据

【参考文章】:ORA-01861: 文字与格式字符串不匹配

1. java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束

1.1 创建表的别名时去掉 as 关键字

1.2 子语句后面添加或去掉逗号

  在 left join  ... on ...后面添加逗号(,)或者去掉逗号(,)

  Oracle两个左连接语句,一个需要加逗号,一个需要去掉逗号,我也不知道为啥

  select xxx  from  tableA left join xxx on xxx , where xxx;

1.3 限制查询记录数量

  Oracle 有一个隐藏的字段是 rownum,表示当前记录是第几行

  MySQL:select xxx from table limit  n

  Oracle:select  xxx from table where  xxx=xxx and  rownum=n;

1.4 排序后取第一行

  如果要先排序,再取第一行,则需要:select  xxx from (select  xxx from table where xxx=xxx order by time) where rownum=n;

2. java.sql.SQLSyntaxErrorException: ORA-00909: 参数个数无效

2.1 concat函数

  select COUNT(*) from base_vehicle_info where 1=1 and org_id IN (SELECT org_id FROM base_organization 
WHERE id_level LIKE CONCAT('%/',#{orgId},'/%') and del_flag = 0

  mysql 的 concat可连接一个或者多个字符串;

  oracle 的 concat 只能连接两个字符串,超过两个的时候需要嵌套使用;

  select COUNT(*) from base_vehicle_info where 1=1 and org_id IN (SELECT org_id FROM base_organization 
WHERE id_level LIKE concat(concat('%', 1584), '%'))and del_flag = 0

3. java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符

3.1 分号

  去掉查询语句后面的分号

4. ORA-00904 :xxx标识位无效

  检查表明和字段名是否正确

4.1 IFNULL 标识符无效

  mysql的 IFNULL可用 Oracle 的 nvl 代替

  

原文地址:https://www.cnblogs.com/virgosnail/p/12739243.html