一、命令没有正确的结束

(ORA-00933:SQL命令没有正确的结束)导致原因:

1:可能SQL语句中关键字前后缺少空格

2:Oracle 给表起别名时,直接在表名的后面空格别名就可以,不需要AS

3:SQL 语句中缺少关键字或者多了某个关键字,比如:AND

4:SQL 语句中缺少关键字或者多了某个标点符号,比如:,

二、指定升序降序

oracle order by 不指定 asc或者desc,默认是升序,即asc。

三、分页Limit

limit是mysql里的,select * from a order by b limit 6,1,取得按b排序的第6行第1个的值

而在oracle中想要实现是通过 rownum:select * from a where rownum<6 order by b

四、连接数问题

-- 查看当前系统有多少连接数
select count(*) from v$process
-- 查看当前设置的连接数
select value from v$parameter where name = 'processes'
-- 修改当前设置的连接数
alter system set processes = 300 scope = spfile;
-- 查看当前数据库连接的消耗情况
select  b.MACHINE, b.PROGRAM, b.USERNAME, count(*) from v$process a, v$session b where a.ADDR = b.PADDR and  b.USERNAME is not null  
group by  b.MACHINE, b.PROGRAM, b.USERNAME order by count(*) desc

image-20200714111942073

五、闪回恢复区

问题

ORA-03113:end-of-file on communication channel 报错

解决

alter system set db_recovery_file_dest_size=1G;

六、无法串行访问事务错误

问题

ORA-08177: can't serialize access for this transaction

解决

当事务隔离级别为serializable,两个事务并发修改同一个对象,当前一个事务提交或回滚时,第二个事务会收到该错误。

七、SQL语句太长

问题

ORA-01745: invalid host/bind variable name

解决

原因是由于sql语句包含了太多的“?”(占位符),超出了Oracle的限制。经过验证,当占位符数量超过65536时,就会报出异常。

八、ORA-00911多了冒号

去掉mybaties语句的分号。