oracle批量sql
❶ oracle如何批量执行某个文件夹下面的多个.sql脚本
为什么我在cmd窗口中输入sqlplus user/pass为报错
❷ 我在oracle数据库里批量添加数据失败 报SQL命令未正确结束 但是单条数据可以添加成功代码如下:
如果单条闷游可以,多条不行,可能是语句衔接问题,
有些用 分号;
有些用 换行斜杠蚂昌销 /
可以换一个试试,还有不要一下迅团子输入很多条,输入2条,先验证写法。
❸ python批量执行oracle的sql文件
可以使用轮拿Python的cx_Oracle模块来实现:
```
import cx_Oracle
# 连接数据库腊蔽搭
conn = cx_Oracle.connect('username/password@host:port/sid')
# 创建游标
cursor = conn.cursor()
# 打开sql文并慎件
f = open('sql_file.sql', 'r')
# 读取sql文件
sql_file = f.read()
# 执行sql文件
cursor.execute(sql_file)
# 关闭游标
cursor.close()
# 关闭数据库连接
conn.close()
```
❹ 求oracle中批量更新ID字段的sql语句
我给你一个烂弊SQL:
updateSTUDENTs
sets.CLASSID=
(
selectc.CLASSID
饥旦族迟哗fromclassc
wherec.CLASSNAME=s.CLASSNAME
)
❺ 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()
lishixin/Article/program/Oracle/201311/18480
❻ oracle批量执行sql文件为什么快
因为可以把批量的sql进行预编译 放在数据库内存中 如果调用 直接向数据库发送命令就可以了
❼ 数据批量sql*load导入Oracle数据库
SQL*LOADER是大型数据
仓库选择使用的加载方法 因为它提供了最快速的途径(DIRECT PARALLEL) 现在 我们抛开其理论不谈 用实例来使
您快速掌握SQL*LOADER的使用方法
首先 我们认识一下SQL*LOADER
在NT下 SQL*LOADER的命令为SQLLDR 在UNIX下一般为sqlldr/sqlload
如执行 d:oracle>sqlldr
SQL*Loader: Release Proction on 星期二 月 : :
(c) Copyright Oracle Corporation All rights reserved
用法: SQLLOAD 关键字 = 值 [ keyword=value ]
有效的关键字:
userid ORACLE username/password
control Control file name
log Log file name
bad Bad file name
data Data file name
discard Discard file name
discardmax Number of discards to allow (全部默认)
skip Number of logical records to skip (默认 )
load Number of logical records to load (全部默认)
errors Number of errors to allow (默认 )
rows Number of rows in conventional path bind array or beeen direct p
ath data saves
(默认: 常规路径 所有直接路径)
bindsize Size of conventional path bind array in bytes(默认 )
silent Supdivss messages ring run (header feedback errors discards part
扮伏itions)
闹坦direct use direct path液缺桐 (默认FALSE)
parfile parameter file: name of file that contains parameter specification
s
parallel do parallel load (默认FALSE)
file File to allocate extents from
skip_unusable_indexes disallow/allow unusable indexes or index partitions(默认FALSE)
skip_index_maintenance do not maintain indexes mark affected indexes as unusable(默认FALSE)
mit_discontinued mit loaded rows when load is discontinued(默认FALSE)
readsize Size of Read buffer (默认 )
PLEASE NOTE: 命令行参数可以由位置或关键字指定
前者的例子是 sqlload scott/tiger foo ;
后者的例子是 sqlload control=foo userid=scott/tiger
位置指定参数的时间必须早于但不可迟于由关键字指定的参数 例如
SQLLOAD SCott/tiger control=foo logfile=log
但 不允许 sqlload scott/tiger control=foo log
即使允许参数 log 的位置正确
d:oracle>
我们可以从中看到一些基本的帮助信息 这里 我用到的是中文的WIN ADVSERVER
我们知道 SQL*LOADER只能导入纯文本 所以我们现在开始以实例来讲解其用法
一 已存在数据源result csv 欲倒入ORACLE中FANCY用户下
result csv内容
默认 Web 站点 : : RUNNING
other : : STOPPED
third : : RUNNING
从中 我们看出 列 分别以逗号分隔 为变长字符串
二 制定控制文件result ctl
result ctl内容
load data
infile result csv
into table resultxt
(resultid char terminated by
website char terminated by
ipport char terminated by
status char terminated by whitespace)
说明
infile指数据源文件这里我们省略了默认的discardfile result dsc badfile result bad
into table resultxt 默认是INSERT 也可以into table resultxt APPEND为追加方式 或REPLACE
terminated by 指用逗号分隔
terminated by whitespace结尾以空白分隔
三 此时我们执行加载
D:>sqlldr userid=fancy/testpass control=result ctl log=resulthis out
SQL*Loader: Release Proction on 星期二 月 : :
(c) Copyright Oracle Corporation All rights reserved
SQL*Loader : 在描述表RESULTXT时出现错误
ORA : 对象 RESULTXT 不存在
提示出错 因为数据库没有对应的表
四 在数据库建立表
create table resultxt
(resultid varchar ( )
website varchar ( )
ipport varchar ( )
status varchar ( ))
/
五 重新执行加载
D:>sqlldr userid=fancy/k i l l control=result ctl log=resulthis out
SQL*Loader: Release Proction on 星期二 月 : :
(c) Copyright Oracle Corporation All rights reserved
达到提交点 逻辑记录计数
达到提交点 逻辑记录计数
已经成功!我们可以通过日志文件来分析其过程 resulthis out内容如下
SQL*Loader: Release Proction on 星期二 月 : :
(c) Copyright Oracle Corporation All rights reserved
控制文件: result ctl
数据文件: result csv
错误文件: result bad
废弃文件: 未作指定
:
(可废弃所有记录)
装载数: ALL
跳过数:
允许的错误:
绑定数组: 行 最大 字节
继续: 未作指定
所用路径: 常规
表RESULTXT
已载入从每个逻辑记录
插入选项对此表INSERT生效
列名 位置 长度 中止 包装数据类型
RESULTID FIRST * CHARACTER
WEBSITE NEXT * CHARACTER
IPPORT NEXT * CHARACTER
STATUS NEXT * WHT CHARACTER
表RESULTXT:
行载入成功
由于数据错误 行没有载入
由于所有 WHEN 子句失败 行没有载入
由于所有字段都为空的 行没有载入
为结合数组分配的空间: 字节( 行)
除绑定数组外的内存空间分配: 字节
跳过的逻辑记录总数:
读取的逻辑记录总数:
拒绝的逻辑记录总数:
废弃的逻辑记录总数:
从星期二 月 : : 开始运行
在星期二 月 : : 处运行结束
经过时间为: : :
CPU 时间为: : : (可
六 并发操作
sqlldr userid=/ control=result ctl direct=true parallel=true
sqlldr userid=/ control=result ctl direct=true parallel=true
sqlldr userid=/ control=result ctl direct=true parallel=true
当加载大量数据时(大约超过 GB) 最好抑制日志的产生
SQL>ALTER TABLE RESULTXT nologging;
这样不产生REDOLOG 可以提高效率 然后在CONTROL文件中load data上面加一行 unrecoverable
此选项必须要与DIRECT共同应用
在并发操作时 ORACLE声称可以达到每小时处理 GB数据的能力!其实 估计能到 - G就算不错了 开始可用结构
相同的文件 但只有少量数据 成功后开始加载大量数据 这样可以避免时间的浪费
我的示例
一 在数据库建立表格weather如下
create table weather(
outlook varchar( )
temperature float
humidity float
windy varchar( )
play varchar( )
)
二 在F盘建立两个文件 分别如下
# result ctl内容如下
load data
infile result csv
into table weather
(outlook char terminated by
temperature char terminated by
humidity char terminated by
windy char terminated by
play char terminated by
)
# result csv内容如下
sunny FALSE no
sunny TRUE no
overcast FALSE yes
rainy FALSE yes
rainy FALSE yes
rainy TRUE no
overcast TRUE yes
sunny FALSE no
sunny FALSE yes
rainy FALSE yes
sunny TRUE yes
overcast TRUE yes
overcast FALSE yes
rainy TRUE no
三 命令行下执行
F:>sqlldr userid=cq *** /ctbujx control=result ctl
lishixin/Article/program/Oracle/201311/18602
❽ Oracle 批量执行多个sql文件
方法如下:
1:运行cmd进入命令行界面
2:进入到存放批量sql的文件夹下面
3:输入命令 sqlplus 数据库名/密码@数据库 按回车键
4:输入spool 指定路径:\a.log 按回车键 (此步骤的主要作用就是追踪批量执行sql的日志,路径随便写,只要能找到就行,a.log可以随便起名,但是必须要.log后缀)
5:@start.sql 按回车键(在批量sql文件夹下写一个文件,名字叫start.sql,其中在这个文件里面写批量sql的文件名)
具体格式如下:@@sql的文件名.sql;
@@sql的文件名2.sql;
6:spool off (此时a.log中所有日志已经写入完毕)
7:exit 退出sqlplus
当然只有一个sql文件,但是里面有多个insert语句,数据量非常大,此时也可以在命令状态下执行,前4步是一样的,第五步就是@文件名.sql;
❾ oracle 单字段 批量更新的sql语句怎么写
实现sql批量更新语句如下:
update tblName set BBBB=right(AAAA,3);
❿ 求oracle批量更新sql语句。四表联合查询才可更新。急!!!
set serveroutput on;D表如果1条记录的话多更新几次排序拍弯绝下最后一次更新袭姿的就是最大的时间
declare cursor c_job is select a.A_RQ,d.XSD_ID from 异动表 a ,出库档单头 b , 出库档单身闹颤 c , 销售单异动 d
where a.A_CKD=b.B_CKD and b.B_CKD=c.C_CKD and b.B_XSD_ID=d.XSD_ID order by a.A_CKD,a.A_RQ
begin
for cur_stu in c_job
loop
update 销售单异动 set XSD_DATE=cur_stu.A_RQ where XSD_ID=cur_stu.XSD_ID
end loop;
end;