使用Oracle时遇到的一些问题

Oracle与Mysql的差异

  1. Oracle没有主键自增主键一般使用的序列 Mysql主键自增长
  2. 单引号的处理 Mysql里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
  3. 时间函数
    1)Mysql now() Mysql的sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。now()比较常用
    Mysql日期函数 https://www.cnblogs.com/ggjucheng/p/3352280.html
    2)Oracle 从dual这个表(伪表)查询,直接插入语句写sysdate就够了(没括号)
    Oracle 在SQL语句中如何获取系统当前时间并进行操作 https://blog.csdn.net/idomyway/article/details/79016527
  4. 分页查询

1)Oracle

SELECT * FROM  
(  
SELECT A.*, ROWNUM RN  
FROM (SELECT * FROM TABLE_NAME) A  
WHERE ROWNUM <= 40  
)  
WHERE RN >= 21

https://www.cnblogs.com/zhaotiancheng/p/6262635.html
2)Mysql
一般的分页查询使用简单的 limit 子句就可以实现。limit 子句声明如下:

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
#从第1000个数据开始查,查10个数据
select * from table where type=8 limit 1000,10; 

Mysql分页查询优化 https://www.cnblogs.com/youyoui/p/7851007.html 分页查询,偏移量越多,查询越慢

Mysql大数据量分页查询 https://www.cnblogs.com/geningchao/p/6649907.html

Mybatis改写SQL语句遇见的一些问题

Mybatis批量删除数据,最大量是1000,需要自己手动将List切分成小于等于1000的集合操作
工具类

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
//将list切层list集合
public class ListSplitUtil {
    public static <T> List<List<T>> fixedList(List<T> list,int n){
        if (list==null||list.size()==0||n<=0) {
            return null;
        }
        List<List<T>> result=new ArrayList<List<T>>();
        int listSize=list.size();
        int size=(list.size()/n)+1;
        for (int i = 0; i <size ; i++) {
            List<T> subset=new ArrayList<T>();
            for (int j = i*n; j <(i+1)*n ; j++) {
                if (j<listSize){
                    subset.add(list.get(j));
                }
            }
            result.add(subset);
        }
        return result;
    }


}

数据库的时间取出来是String类型,想转为java.util.Date类型自己手动转
工具类
默认一个格式yyyy-MM-dd HH:mm:ss,如果你同时传入string和fomat格式,那么就会按照你传的格式改变,如果没传默认上面的格式做转换

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatUtil {
    public static Date toDate(String _date){
        String defaultFormat="yyyy-MM-dd HH:mm:ss";
        return toDate(_date,defaultFormat);
    }
    public static Date toDate(String _date,String format){
        SimpleDateFormat sdf=new SimpleDateFormat(format);
        Date date=null;
        try {
            date=sdf.parse(_date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}

语句中不允许出现;
大于号 用 & gt;替代 小于号用 & lt;替代
mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“ 错误解决方法 在标签内添加useGeneratedKeys=“false”

  <insert id="addList" parameterType="java.util.List" useGeneratedKeys="false">
              INSERT INTO table_name  where select * from table_name2
   </insert>

、、

 <select id="queryList" resultType="com.example.model.Bean">
          select * from table_name
 </insert>
 resultType="xxxx"不用写List 写返回值的类型就行 基础类型和Bean都可以

#{field, jdbcType=NUMERIC} 动态sql里面传变量 数值类型
#{field, jdbcType=VARCHER} 字符串类型
MyBatis几种不同类型传参的总结 https://blog.csdn.net/m0_37837382/article/details/81626908

使用PLSQL的一些总结

表的语句无法执行 oracle11g报错ORA-00054:资源正忙,要求指定NOWAIT如何解决?
1)被其他用户编辑占用
让其释放即可使用
2)表被锁导致无法执行(Oracle机制 重点)
一条插入语句未执行完成,下一条插入语句开始执行就会导致表锁定
https://www.2cto.com/database/201802/723182.html
查询以外的操作每次完成都手动提交一下,不然表始终是被占用的。
直接用图形界面编辑表数据的时候修改完先把那个小锁子锁上,然后提交数据

PlSQL导出数据表结构以及表数据

https://wenwen.sogou.com/z/q806564636.htm 用户名和密码不一样导不进去
一般克隆数据的方法,如果数据量小,则直接拖选数据复制,再到目标库的图形界面中粘贴即可。
数据量大的时候,先建立dblink,然后如果目标库有表结构的话,直接insert 目标库表名 select * from 源库表名。如果没有表结构就把源数据库导出sql脚本(包含表结构以及数据),然后以sql文件的形式导入。如果不行,就问数据库开发要sql脚本,一般都在本公司git或者svn代码同级有sql脚本文件夹

无法从套接字读取到更多数据

其他

视图没有办法建立索引

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值