當前位置:首頁 » 編程語言 » oracle批量sql

oracle批量sql

發布時間: 2023-05-17 01:19:26

❶ 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;
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;
D表如果1條記錄的話多更新幾次排序拍彎絕下最後一次更新襲姿的就是最大的時間

熱點內容
安卓如何打開shell窗口 發布:2025-07-16 09:28:09 瀏覽:311
華為榮耀備忘錄文件夾 發布:2025-07-16 09:23:23 瀏覽:972
基於特徵匹配演算法 發布:2025-07-16 09:18:23 瀏覽:46
夢香神奇寶貝伺服器的ip 發布:2025-07-16 09:14:07 瀏覽:212
電子密碼手套箱是什麼 發布:2025-07-16 09:13:27 瀏覽:799
手機連接資料庫 發布:2025-07-16 09:13:23 瀏覽:132
廣東伺服器存儲虛擬主機 發布:2025-07-16 09:13:17 瀏覽:326
絕地逃亡電腦怎麼設置最低配置 發布:2025-07-16 09:10:50 瀏覽:425
聯想z5的配置如何 發布:2025-07-16 09:08:21 瀏覽:879
電腦加密軟體哪個好 發布:2025-07-16 09:05:47 瀏覽:320