通过shell脚本向oracle数据库插入数据
- 思路
- 实现
- shell脚本
- 数据文件
- 测试
思路
如何通过shell脚本更新数据库数据?要解决这个问题,首先,我们需要在脑中回忆一下我们通常是如何更新数据库数据的。向表插入数据,无外乎这几种操作方式
- 通过图形化界面(例如:PL/SQL Developer)
- 通过SQL语句
在图形化界面中插入数据异常的简单,(以PL/SQL Developer为例),你可以通过在SQL窗口中输入:
select * from table_name for update;
即可直接在图形化界面插入数据,输入完毕后提交事务即可更新数据库。
或者通过SQL语句
insert into table_name values (‘5’,‘尼古拉斯赵四’,‘男’,‘18’);
在Linux中,想让shell脚本通过图形化界面插入数据,很明显不现实,那么剩下的就只能通过sql语句了。
实现
首先,在数据库中创建一张表作为测试shell用的表(我使用的测试表为BIAM_STUDENT,只有四个字段),建表语句如下:
CREATE TABLE BIAM_STUDENT(
ID NUMBER NOT NULL,
NAME VARCHAR2(80),
SEX VARCHAR2(80),
AGE VARCHAR2(80)
)
说明:我的建表是通过PL/SQL Developer创建的,因为我比较懒,事实上建表也可以通过shell脚本实现,但我个人认为意义不大,所以就偷懒了。
shell脚本
sqlinsert.sh
#!/bin/bash
# 传入参数1.数据表名,2.逗号分隔数据文件
conn=username/password@localhost:1521/orcl
# 连接中要替换成你自己的Oracle用户名和密码,默认实例名为orcl如果你更改了也需要替换
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
table_name="$1"
data_file="$2"
function exec_sql() {
local sql=${1}
local result=''
if [ ! -z "${sql}" ]; then
result=$(sqlplus -s /nolog << EOF
set echo off feedback off heading off underline off;
conn $conn;
${sql}
commit;
exit;
EOF
)
fi
echo ${result}
}
function main() {
local check_table_sql="select table_name from user_tables where table_name = ''${table_name}'';"
local res=$(exec_sql ${check_table_sql})
if [ -z "${res}" ]; then
echo "该表不存在!"
else
if [ ! -f "${data_file}" ]; then
echo "数据文件不存在!"
return;
fi
local sql="$(cat ${data_file} | sed -e '/^$/d' | sed -e "s/,/','/g" | sed -e "s/^/insert into ${table_name} values('/g" -e "s/$/'\);/g")"
res=$(exec_sql "${sql}")
if [ -z "${res}" ]; then
echo "数据插入成功!"
else
echo "${res}"
echo "数据插入失败!"
fi
fi
}
main
数据文件
data.txt
1,张三,男,16
2,李四,男,14
3,王五,男,19
4,赵六,男,18
测试
需要注意的是,你在测试时需要将数据文件和脚本放在同一路径下,不然将执行失败
结果如下:
更多推荐
在Linux中通过shell脚本向oracle数据库插入数据
发布评论