思路为采用Oracle 中insert语句的高级用法:INSERT ALL ,批量插入数据:
INSERT ALL举例:
1、建测试表
CREATE TABLE EDW_INT(
AGMT_NO VARCHAR2(40 BYTE) NOT NULL,
AGMT_SUB_NO VARCHAR2(4 BYTE) NOT NULL,
NEED_REPAY_INT NUMBER(22,2),
CURR_PERIOD NUMBER(4) NOT NULL
);
CREATE TABLE EDW_INT_1
(
AGMT_NO VARCHAR2(40 BYTE) NOT NULL,
AGMT_SUB_NO VARCHAR2(4 BYTE) NOT NULL,
NEED_REPAY_INT NUMBER(22,2),
CURR_PERIOD NUMBER(4) NOT NULL
);
CREATE TABLE EDW_INT_2
(
AGMT_NO VARCHAR2(40 BYTE) NOT NULL,
AGMT_SUB_NO VARCHAR2(4 BYTE) NOT NULL,
NEED_REPAY_INT NUMBER(22,2),
CURR_PERIOD NUMBER(4) NOT NULL
);
2插入测试数据
INSERT INTO EDW_INT(AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
('20003874', '2104', 31265, 7);
INSERT INTO EDW_INT
(AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
('20003874', '2104', 329076, 6);
INSERT INTO EDW_INT
(AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
('20003874', '2104', 345406, 5);
INSERT INTO EDW_INT
(AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
('20003874', '2104', 361641, 4);
INSERT INTO EDW_INT
(AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
('20017143', '2104', 235086, 0);
INSERT INTO EDW_INT
(AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
('20017143', '2104', 356655, 0);
INSERT INTO EDW_INT
(AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
('20018273', '2104', 163946, 0);
INSERT INTO EDW_INT
(AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
('20018273', '2104', 208049, 0);
COMMIT;
3insert all-不带条件
insert allinto edw_int_1(agmt_no,agmt_sub_no,need_repay_int,curr_period)
values(agmt_no,agmt_sub_no,need_repay_int,curr_period)
into edw_int_2(agmt_no,agmt_sub_no,curr_period)
values(agmt_no,'1234',curr_period)
select agmt_no,agmt_sub_no,need_repay_int,curr_period from edw_int;
commit;
结合该问题具体分析:
mybatis 的和dao相关的sql写法如下:
<insert id="batchSave">INSERT ALL
<foreach collection="list" item="item">
INTO FSP_BUSINESS_INTEREST_REPORT
(
ID,
BUSINESS_DAY,
LOAN_NO,
CIF_NO,
CIF_NAME,
LOAN_TYPE,
REPAY_WAY,
TERM_TYPE,
VOUCH_WAY,
CHANNEL_TYPE,
LOAN_BEGIN_DATE,
LOAN_END_DATE,
RATE_BEGIN_DATE,
RATE_END_DATE,
AMT,
RATE_TYPE,
RATE,
RATE_AMT,
PAY_TYPE,
REPORT_OUT_FLAG,
REPORT_OUT_DATE,
REPORT_OUT_AMT,
CREATOR,
CREATE_TIME,
UPDATOR,
UPDATE_TIME
) VALUES (
getSeqByName('SEQ_FSP_BUS_INT_REPORT'),
#{businessDay, jdbcType=VARCHAR},
#{loanNo, jdbcType=VARCHAR},
#{cifNo, jdbcType=VARCHAR},
#{cifName, jdbcType=VARCHAR},
#{loanType, jdbcType=VARCHAR},
#{repayWay, jdbcType=VARCHAR},
#{termType, jdbcType=VARCHAR},
#{vouchWay, jdbcType=VARCHAR},
#{channelType, jdbcType=VARCHAR},
#{loanBeginDate, jdbcType=DATE},
#{loanEndDate, jdbcType=DATE},
#{rateBeginDate, jdbcType=DATE},
#{rateEndDate, jdbcType=DATE},
#{amt, jdbcType=NUMERIC},
#{rateType, jdbcType=VARCHAR},
#{rate, jdbcType=NUMERIC},
#{rateAmt, jdbcType=NUMERIC},
#{payType, jdbcType=VARCHAR},
#{reportOutFlag, jdbcType=VARCHAR},
#{reportOutDate, jdbcType=DATE},
#{reportOutAmt, jdbcType=NUMERIC},
#{creator, jdbcType=VARCHAR},
#{createTime, jdbcType=DATE},
#{updator, jdbcType=VARCHAR},
#{updateTime, jdbcType=DATE}
)
</foreach>
SELECT 1 FROM DUAL
</insert>
2dao中接口如下定义:
void batchSave(@Param("list") List<BusinessInterestReport> list);表空间在初始建立的时候最好设置成自动扩展的,如果没有设置成扩展的,则有四种方法可以增加表空间的大小,其中增加数据文件是经常用的一种。四种方法如下:
Meathod1:给表空间增加数据文件
ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\1020\ORADATA\EDWTEST\APP03DBF' SIZE 50M;
Meathod2:新增数据文件,并且允许数据文件自动增长
ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\1020\ORADATA\EDWTEST\APP04DBF' SIZE 50M
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
Meathod3:允许已存在的数据文件自动增长
ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\1020\ORADATA\EDWTEST\APP03DBF'
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
Meathod4:手工改变已存在数据文件的大小
ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\1020\ORADATA\EDWTEST\APP02DBF'
RESIZE 100M;
1、你导出的dmp中的某些表空间就很大,121M只是数据的大小,不含表空间;
2、删除表空间和用户后windows再删除实体文件,linux先offline数据文件,drop,重启数据库就好了
以上就是关于mybatis获取一个list怎么添加到数据库里全部的内容,包括:mybatis获取一个list怎么添加到数据库里、在Oracle数据库中,如何增加表空间的大小、Oracle 数据库问题: 1、DMP导入表空间后增长100倍左右; 2、Oracle自动释放硬盘空间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)