0

我的一个脚本有问题。我有一个信息列表,每行包含 3 个单词(或单词链),由 a 分隔;
我要做的是读取这个文件并将信息保存到 Oracle 数据库中。第一列是用户 ID,第二列是名字,第三列是姓氏。为了保留空格(例如对于复杂的名称),我想使用 awk。但它不起作用......我写的是:

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}'

我试着把;在每行的末尾正确分隔说明,但它没有改变任何东西......

4

1 回答 1

3

我建议您使用bash read而不是awk创建一个 sql 文件,以后可以在sqlplus.

例如,以下将创建一个 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 连接。

于 2013-07-08T14:17:00.210 回答