oracle批量insert(oracle批量insert效率)
本篇文章给大家谈谈oracle批量insert,以及oracle批量insert效率对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、如何提高oracle批量插入效率
- 2、Oracle数据的批量插入
- 3、Oracle 批量插入数据怎么做
- 4、Oracle insert all用法简介
- 5、oracle存储过程怎样批量插入新数据
- 6、oracle批量insert不好用
如何提高oracle批量插入效率
一般实际使用过程中,很少用大批前键老量的INSERT 操作的
INSERT操作会占用数慧升据库的REDO空间,没插入一条会写一条回滚记录 ,所以很慢
如果是从一个数据库导入到另外一个数据库,可以用dmp文件来实现导入导出,
如果亮郑是从EXCEL里面导入到数据库里面
可以直接只用复制粘贴的方式来走
如果是从一张表转移到另外一张表,可以通过insert into 表1 select * from 表2 的方式
Oracle数据的批量插入
前两天接到一个需求——需要编程将SQL Server中的数据插入至Oracle 数据大约有 多万条记录 开始的时候我采取了直接构建SQL插入的方式 结果耗时太长 为了提高性能我上网找了资料 最终采用DataAdapter批量插入至Oracle 提高了性能
代码如下
一 直接构建SQL语句插入
VB NET
sw Start()
Read Z J from SQL Server
Dim sqlCmd As New SqlCommand()
sqlCmd Connection = sqlConnection
sqlCmd CommandText = SELECT * FROM Z J
Dim sqlDr As SqlDataReader
sqlDr = sqlCmd ExecuteReader()
Dim cmdInsertZ J As New OracleCommand()
cmdInsertZ J Connection = oraConnection
cmdInsertZ J CommandText = BuildSQLStatement(SQLType Insert z j )
Dim plantLever material oldMaterialNum materialDescription As Object
橡冲漏 While sqlDr Read()
plantLever = ReadSqlDataReader(sqlDr )
material = ReadSqlDataReader(sqlDr )
oldMaterialNum = ReadSqlDataReader(sqlDr )
materialDescription = ReadSqlDataReader(sqlDr )
Insert to Oracle table Z J
cmdInsertZ J Parameters AddWithValue( :plantLever plantLever)
cmdInsertZ J Parameters AddWithValue( :material material)
cmdInsertZ J Parameters AddWithValue( :oldMaterialNum oldMaterialNum)
cmdInsertZ J Parameters AddWithValue( :materialDescription materialDescription)
cmdInsertZ J ExecuteNonQuery()
End While
sw Stop()
梁烂 Loger Info( Reading z j form sql sever used sw Elapsed TotalSeconds ToString())
二 采用DataAdapter实现批量插入
VB NET
sw Start()
判或 Read Z J from SQL Server
Dim sqlCmd As New SqlCommand()
sqlCmd Connection = sqlConnection
sqlCmd CommandText = SELECT * FROM Z J
Dim sqlDr As SqlDataReader
sqlDr = sqlCmd ExecuteReader()
Dim cmdInsertZ J As New OracleCommand()
cmdInsertZ J Connection = oraConnection
cmdInsertZ J CommandText = BuildSQLStatement(SQLType Insert z j )
Dim dtSqlZ J As New DataTable
dtSqlZ J Columns Add( plantLever )
dtSqlZ J Columns Add( material )
dtSqlZ J Columns Add( oldMaterialNum )
dtSqlZ J Columns Add( materialDescription )
Dim plantLever material oldMaterialNum materialDescription As Object
While sqlDr Read()
plantLever = ReadSqlDataReader(sqlDr )
material = ReadSqlDataReader(sqlDr )
oldMaterialNum = ReadSqlDataReader(sqlDr )
materialDescription = ReadSqlDataReader(sqlDr )
dtSqlZ J Rows Add(plantLever material oldMaterialNum materialDescription)
End While
sw Stop()
Loger Info( Reading z j form sql sever used sw Elapsed TotalSeconds ToString())
sw Start()
Dim oraDa As New OracleDataAdapter()
oraDa InsertCommand = cmdInsertZ J
oraDa InsertCommand Parameters Add( :plantLever OracleType Char plantLever )
oraDa InsertCommand Parameters Add( :material OracleType Char material )
oraDa InsertCommand Parameters Add( :oldMaterialNum OracleType Char oldMaterialNum )
oraDa InsertCommand Parameters Add( :materialDescription OracleType Char materialDescription )
oraDa InsertCommand UpdatedRowSource = UpdateRowSource None
oraDa UpdateBatchSize = Adjust the batch size based on testing result
oraDa Update(dtSqlZ J)
sw Stop()
lishixinzhi/Article/program/Oracle/201311/18480
Oracle 批量插入数据怎么做
一个例子你看看
create or replace procedure p_test is
v_day varchar2(20);
nextday varchar2(20);
cur_value number;
yes_value number;
thismonth_totalvalue number;
lastmonth_totalvalue number;
i number;
tempday varchar2(20);
day_count integer;
begin
execute immediate 'truncate table DM_KPID_IW_AREA';
v_day := '20070101';
-- lastmonth_totalvalue := 0;
for k in 0 .. 11 loop
tempday := to_char(add_months(to_date(v_day,
'yyyymmdd'),
k),
'yyyymmdd');
yes_value := 0;
thismonth_totalvalue := 0;
-- 这里好像有一个比较方便的函数吧,记不清了
day_count := to_char(last_day(to_date(tempday, 'yyyymmdd')), 'dd');
for i in 0 .. day_count - 1 loop
nextday := to_char(to_date(tempday, 'yyyymmdd') + i,
扰梁 'yyyymmdd');
cur_value := trunc(dbms_random.value(1, 100), 0);
thismonth_totalvalue := thismonth_totalvalue + cur_value;
begin
select t.thismonth_totalvalue
into lastmonth_totalvalue
from dm_kpid_iw_area t
where t.day_id =
--考虑如3月30日之类这样的情况,前一月没有对应的日子的情况,
--如果此时上月值为0的话,则应该为:
--to_char(add_months(to_date(nextday, 'yyyymmdd'), -1),
--'yyyymm') || substr(nextday, 7, 2);
to_char(add_months(to_date(nextday, 'yyyymmdd'), -1),
'yyyymmdd');
exception
when no_data_found then
lastmonth_totalvalue := 0;
end;
insert into dm_kpid_iw_area
(day_id,
cur_value,
yes_value,
thismonth_totalvalue,
lastmonth_totalvalue)
values
(nextday,
cur_value,
缓镇运 旅芦 yes_value,
thismonth_totalvalue,
lastmonth_totalvalue);
yes_value := cur_value;
commit;
end loop;
end loop;
end;
[img]Oracle insert all用法简介
insert all是oracle中用于批量写数据的
现在直接通过例子学习一下,比较简单直观,例掘前子来自《收获,不止SQL优化》一书
环境准备宏升
创建两张测试表,不用写数据
然后演示一下insert all的用法
无条件写数据的情况
有条件写蔽散老数据的情况
insert first
insert first情况,介绍一下insert first的用法,insert first用法和insert all类似,区别的是insert first多了筛选的步骤,简单来说就是和insert all一样,符合条件的同样会写数据,不过已经存在数据了,insert first是不会写入的,而insert all是会出现重复数据的情况
pivoting insert
然后再演示一下pivoting insert的情况,pivoting insert可以说是insert all的一直特殊情况,不过oracle官方还是区分出来,pivoting insert可以翻译为旋转写入,名称的不重要,看一下例子就懂了
环境准备
按照条件进行写数据
oracle存储过程怎样批量插入新数据
需要生成的SQL
insert into TMP_UPSTATE_CASEKEY values('TMP0000001', 1, sysdate);
存储过程实现
create or replace procedure proc_casekey_upstate
as
casekey char(14);
begin
for i in 1..10000000 loop
casekey := 'TMP'||lpad(i,7,0); -- TMP0000001
insert into TMP_UPSTATE_CASEKEY values(casekey, 1, sysdate);
end loop;
commit;
end;
begin
proc_casekey_upstate();
end;
测试哗袜发现早御生成一千万条数据用了14分钟左右,性能还是可以了,如果先去陆芦岩掉TMP_NUM_STATUS_ID的外键估计更快。
或者:
insert into TMP_UPSTATE_CASEKEY select 'TMP'||LPAD(rownum,7,0),1,sysdate from dual connect by level = 1000000;
oracle批量insert不好用
. 原宽派因分析 当我们使用MyBatis的批量插入时候,在控制台会发现有很多的问好,这些都是自定义的变量值,当变量值超过64K时,Oracle就简巧态会抛出异常,主要原因就是
2. 解决方拦源案 首先用java代码实现基本的批量逻辑代
关于oracle批量insert和oracle批量insert效率的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。