本次博主主要进行oralce数据库开发,好久不用oracle,有很多知识点也忘的差不多了,本次主要是复习一下工作中主要使用的一些sql语句编写;

查询

查询语句都是正常的,但是需要注意的是oracle数据库在查询的时候,表名使用别名的时候,请不要使用as关键字,只有mysql数据库才可以使用,oracle只支持字段名别名可以使用as关键字。

  增加

  添加数据的时候,我们后台很可能使用到添加后的主键id,此时也跟mysql不一样,mybatis只要配置一下insert属性就可以了,比如:

  1 <insert id="add" keyProperty="recId" useGeneratedKeys="true">

  但是这样不支持oracle,因为oracle没有自增的主键,只能自己依靠自己定义的自增序列来为主键id赋值;前提是需要知道序列名,比如:

<insert id="add">
<selectKey keyProperty="recId" resultType="long" order="BEFORE">
select SEQ_Table.nextval from dual
</selectKey>
insert into SA(id)values(#{recId})
</insert>

  序列是这样创建的:

create sequence SEQ_Table \\序列名
increment by 1 \\步长为1
start with 1 \\从1开始
maxvalue 999999999; \\最大值

  这样我们就可以使用我们自定义的序列了

  批量增加时,是不会给主键id赋值的,只能插入,有两种方法:

  第一种,表中没有主键id,都是其他基本信息和外部传进来的关联id,

<insert id="batchAdd">
insert all
<foreach collection="entities" item="entity" separator=" " open=" " close=" ">
into SA_T(
REC_ID,GOODS_NAME,
REG_USR_ID,REG_DT,UPDT_USR_ID,UPDT_DT
)values
(#{entity.recId},#{entity.goodsName},
#{entity.regUsrId},#{entity.regDt},#{entity.updtUsrId},#{entity.updtDt})
</foreach>
select 1 from dual
</insert>

  第二种:单表添加时,需要根据序列值来增加,用第一种方法是不可行的,比如:

<insert id="batchAdd">
insert all
<foreach collection="entities" item="entity" separator=" " open=" " close=" ">
into SA_T(
REC_ID,GOODS_NAME,
REG_USR_ID,REG_DT,UPDT_USR_ID,UPDT_DT
)values
(SEQ_T.nextval,#{entity.goodsName},
#{entity.regUsrId},#{entity.regDt},#{entity.updtUsrId},#{entity.updtDt})
</foreach>
select 1 from dual
</insert>

  这样之后,只会出现都是同一个主键id,而不会是逐渐增加的,所以要用下面这种方式:

<insert id="batchAdd">
insert
into SA(REC_ID,DEALER_CODE)
select SEQ_SA.nextval,t.* from (
<foreach collection="entities" item="entity" separator="union all">
select #{entity.dealerCode} from dual
</foreach>
) t

  这是正常的增加,还有一些insert into 。。select。。from这样的从其他表直接查询过来的,也需要注意一下,字段名一定要一样,因为没有指定那些字段需要被添加,所以要都一样

<insert id="findAndAddByVinNoList">
insert into SA_T_LOG
select * from SA_T
where VIN in
<foreach collection="entities" item="vin" separator="," open="(" close=")" >
#{vin}
</foreach>
</insert>

  剩下的就是业务逻辑了,本人就不关注了。知识都是需要自己巩固复习的,要不然会忘的一干二净,刚接触的时候,连序列都忘了是啥了;相当年自己都可以在oracle中声明对象一些骚操作也都忘了


  Oracle如何把字符串结果集按照一列显示出来呢?解决思路就是先将其拼接一个字符串然后切割进行获取sql:

1 select  DISTINCT REGEXP_SUBSTR(TXT, '[^,]+', 1, LEVEL) AS TERM_VAL1 from
2 (select '1,2,3,4,5' as txt from dual)
3 CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(TXT, '[^,]+', '')) + 1

mybatis使用oracle进行添加数据的心得的更多相关文章

  1. 使用mybatis向oracle数据库插入数据异常

    遇到了使用mybatis向oracle数据库插入数据异常的问题, 具体的报错如下:org.springframework.jdbc.UncategorizedSQLException: ### Err ...

  2. MyBatis在Oracle中插入数据并返回主键的问题解决

    引言:  在MyBatis中,希望在Oracle中插入数据之时,同一时候返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle. Spring 3.2   SQL Snipp ...

  3. MyBatis+mysql查询和添加数据

    项目结构: Menu package com.mstf.dao; import java.util.Scanner; import org.apache.ibatis.session.SqlSessi ...

  4. 低级错误之Oracle客户端添加数据

    本来可以为空的外键,自己非要写一个无意义的值,导致数据保存失败.

  5. 基于mybatis向oracle中插入数据的性能对比

    数据库表结构: 逐条插入sql语句: <insert id="insert" parameterType="com.Structure"> INSE ...

  6. mybatis+oracle添加一条数据并返回所添加数据的主键问题

    最近做mybatis+oracle项目的时候解决添加一条数据并返回所添加数据的主键问题 controller层 @RequestMapping("/addplan") public ...

  7. Oracle添加数据文件创建表空间,创建用户代码

    1,添加数据文件创建表空间 CREATE TABLESPACE "TEST1" DATAFILE 'D:\ORACLE\11G\ORADATA\ORCL\TEST1.DBF' SI ...

  8. oracle添加数据时主键自动增长

    CREATE TABLE STUDENT( --创建学生表  ID NUMBER(10) PRIMARY KEY,   --主键ID  SNAME VARCHAR2(20), ); 此时给学生表添加数 ...

  9. MyBatis基础入门《十》添加数据

    MyBatis基础入门<十>添加数据 描述: 修改了实体类:TblClient.java,将其字段:cbirthday 由String类型改成了Date类型. TblClient.java ...

  10. [oracle] 如何使用myBatis在数据库中插入数据并返回主键

    在MyBatis中,希望在Oracle中插入数据的同时返回主键值,而非插入的条数. ① oracle使用 selectKey. U_USER_INFO_SEQ 是在数据库中定义好的这张表关联的序列se ...

随机推荐

  1. Educational Codeforces Round 104 (Rated for Div. 2) A~E题解

    写在前边 链接:Educational Codeforces Round 104 (Rated for Div. 2) A. Arena 链接:A题链接 题目大意: 给定一个长度为\(n\)的数组,表 ...

  2. [编程]UML语言:理论之光与实践之惑

    UML介绍及现状 UML(统一建模语言)是软件工程领域中具有悠久历史的一种模型化语言工具.它通过标准化的图形符号体系,使得软件系统的蓝图能够被更直观地表达出来.UML诞生于20世纪90年代,经过多年积 ...

  3. 【uniapp】【外包杯】学习笔记day08 | 初具雏形+后期任务

    总的来说就是BBQ了,基本上前后端都有了阶段性成果,但是问题在于是否符合我们题目的要求,所以也需要进行很详细的改动,其次就是小程序的支付功能以及登录功能1还有具体配置还是不太行. 然后下载的sprin ...

  4. 文心一言 VS 讯飞星火 VS chatgpt (150)-- 算法导论12.2 6题

    六.用go语言,考虑一棵二叉搜索树 T ,其关键字互不相同.证明:如果 T 中一个结点 x 的右子树为空,且 x 有一个后继 y ,那么 y 一定是 x 的最底层祖先,并且其左孩子也是 x 的祖先.( ...

  5. MySQL笔记01: MySQL入门_1.3 MySQL启动停止与登录

    1.3 MySQL启动停止与登录 1.3.1 MySQL启动与停止 MySQL数据库分为客户端和服务器端,只有服务器端服务开启以后,才可以通过客户端登录MySQL服务端. 首先,以管理员身份运行&qu ...

  6. skywalking插件工作原理剖析

    1. 官方插件二次开发 前面在介绍skywalking-agent目录时,提到了它有一个插件目录,并支持动态的开发插件.其实skywalking默认已经提供大部分框架的插件了,一般情况下不需要额外开发 ...

  7. ElasticSearch之Analyze index disk usage API

    本API用于分析.统计指定index当前占用的存储空间. 考虑到本特性目前仍然处于预览状态,因此使用方法.参数等可能会发生变化,或者未来也许会被删除. 本API暂时不建议在生产系统中使用. 命令样例如 ...

  8. Salesforce LWC学习(四十六) record-picker组件浅谈

    本篇参考: https://developer.salesforce.com/docs/platform/lwc/guide/reference-graphql.html https://develo ...

  9. Golang实现JAVA虚拟机-指令集和解释器

    原文链接:https://gaoyubo.cn/blogs/f57f32cf.html 前置 Golang实现JAVA虚拟机-解析class文件 Golang实现JAVA虚拟机-运行时数据区 一.字节 ...

  10. Android 事件分发介绍

    目录 一.目的 二.环境 三.相关概念 3.1 事件分发 四.详细设计 4.1应用布局 4.1.1 应用布局结构 4.1.2 LayoutInspector 4.2 关键View&方法 4.2 ...