我有一個CSV文件,其中包含一個ID和其他幾列。我在oracle中也有一個表,標識一行。我怎樣才能最好地使用CSV文件中的值替換表中的值,同時保持其他列以前的樣式?使用CSV文件中的值更新Oracle表
這需要使用oracle本身提供的工具(即PL/SQL或SQL腳本)完成,我不能使用「真正的」腳本語言(Python,...)或「真實」的程序。
感謝, 托馬斯
我有一個CSV文件,其中包含一個ID和其他幾列。我在oracle中也有一個表,標識一行。我怎樣才能最好地使用CSV文件中的值替換表中的值,同時保持其他列以前的樣式?使用CSV文件中的值更新Oracle表
這需要使用oracle本身提供的工具(即PL/SQL或SQL腳本)完成,我不能使用「真正的」腳本語言(Python,...)或「真實」的程序。
感謝, 托馬斯
看看在Oracle文檔外部表。您可以將csv文件複製到Oracle服務器框中,並讓Oracle將其呈現爲可在其上運行查詢的「普通」表。
然後,問題就變成了將數據從一個表複製到另一個表的問題。
外部表格對於處理像這樣的數據加載非常有用。
另一種選擇是逐行讀入文件,使用類似於REGEXP_REPLACE的方式解析行中的字段,並更新相應的行。您可以解析逗號分隔的字符串,如下所示:
SELECT TRIM(REGEXP_REPLACE(strLine, '(.*),.*,.*', '\1')),
TRIM(REGEXP_REPLACE(strLine, '.*,(.*),.*', '\1')),
TRIM(REGEXP_REPLACE(strLine, '.*,.*,(.*)', '\1'))
INTO strID, strField1, strField2 FROM DUAL;
如果您的站點不允許使用外部表,這非常有用。
分享和享受。
使用SQL *裝載機
sqlldr [email protected]/password control=load_csv.ctl
的load_csv.ctl文件
load data
infile '/path/to/mydata.csv'
into table mydatatable
fields terminated by "," optionally enclosed by '"'
(empno, empname, sal, deptno)
其中/path/to/mydata.csv是路徑,你需要加載CSV文件,在Windows上有些東西 像C:\ data \ mydata.csv。表名是mydatatable。列出這些列以便它們在最後一行的csv文件中顯示。
除非數據量非常大,否則這是獲取數據 英寸的最簡單方法。如果數據需要定期加載,則可以將其加載到shell腳本中並由CRON運行在U * NX系統上。
首先創建一個表,並把所有的CSV數據轉換成表格,然後寫一個光標來更新您的Oracle表與CSV創建對應的ID
前
create table t
,然後表將CSV數據導入到此表中。
寫信光標
declare
cursor c1 is
select * from t1;
begin
update Oracle table
set
t1.Column=t2.column
where t1.id=t2.id;
我認爲它會工作
+1。 * EXTERNAL TABLE *是關鍵。請點擊此處http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch11.htm#1007030來加載數據。 – Guru 2009-12-23 13:38:47