2013-07-08 38 views
0

我的腳本有問題。我有一個信息列表,每行包含3個單詞(或單詞鏈),由a分隔;
我所要做的就是讀取該文件並將信息保存到Oracle數據庫中。第一列是用戶ID,第二列是名,第三列是姓。爲了保留空格(例如複雜的名稱),我想使用awk。但它不工作...我寫的是:Bash,Awk和Oracle

cat List_employees_a.csv | awk -F ";" '{ 
sqlplus -s << EOF 
${UR_ID}/${PASSWD}@AIM 
insert into UAM.USER_DEFINITION values (UPPER('${1}'),LOWER('${2}'),UPPER('${3}')); 
COMMIT; 
exit; 
EOF}' 

我試圖把;在每行的末尾適當分開說明,但它並沒有改變什麼......

+0

'不起作用'沒有幫助。會發生什麼 - 您是否遇到錯誤,或者插入的數據不符合您的期望?顯示樣本數據和插入的內容(如果有的話)也會有所幫助。 –

+1

你不能在'awk'中執行任意命令,它不是一個編程語言的shell。 –

+0

你絕對要用awk嗎?使用Oracle外部表可以更輕鬆,更高效地完成此任務。 –

回答

3

我會建議你使用bash read代替awksqlplus創建一個SQL文件以後可以源泉。

例如,下面將創建一個SQL文件:

while IFS=';' read -r id fname lname; do 
    echo "insert into UAM.USER_DEFINITION values (UPPER('${id}'),LOWER('${fname}'),UPPER('${lname}'));" 
done <List_employees_a.csv> sql.file 

對於下列文件:

$ cat c.csv 
ida;abc acff;foeee 
idc;fiffh fhfhf fhhhg;aaa 

如果你運行上面的命令,它會創建一個SQL文件如下所示:

$ cat sql.file 
insert into UAM.USER_DEFINITION values (UPPER('ida'),LOWER('abc acff'),UPPER('foeee')); 
insert into UAM.USER_DEFINITION values (UPPER('idc'),LOWER('fiffh fhfhf fhhhg'),UPPER('aaa')); 

一旦你的SQLFILE創建,登錄爲sqlplus,並做到:

SQL > @/path/to/script/file/sql.file 

這將阻止你每次打開一個SQL連接您的讀取一行。