通过shell脚本向oracle数据库插入数据

    • 思路
    • 实现
      • shell脚本
      • 数据文件
      • 测试

思路

如何通过shell脚本更新数据库数据?要解决这个问题,首先,我们需要在脑中回忆一下我们通常是如何更新数据库数据的。向表插入数据,无外乎这几种操作方式

  1. 通过图形化界面(例如:PL/SQL Developer)
  2. 通过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数据库插入数据