博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell调用sqlplus批量执行sql文件
阅读量:6217 次
发布时间:2019-06-21

本文共 1211 字,大约阅读时间需要 4 分钟。

在最近的工作中,经常需要批量执行一些DML, DDL, PL/SQL语句或导入一些Function, Procedure。因为support的国家比较多,常常需要一个登陆到一个国家的数据库上执行完成后再登陆到另一个国家执行,很是麻烦。今天得空就写了个shell来批量处理。

#Env.sh中定义一常用的变量,ORACLE_SID,$AU_USER,$AU_PWD等。

. /home/oracle/shell/Env.sh

AU="$AU_USER/$AU_PWD"

CN="$CN_USER/$CN_PWD"
US="$US_USER/$US_PWD"
UK="$UK_USER/$UK_PWD"

#把所有国家的数据库连接信息放入到一个数组中

set -A ctl_list $AU $CN $US $UK

#对数组进行循环遍历,取出数据库连接信息;

#用spool...append收集执行情况信息;
#"@/home/oracle/shell/load.sql;"执行load.sql文件
for i in ${ctl_list[@]}
do
   sqlplus -L $i@$ORACLE_SID <<EOF
   set serveroutput on;   
     spool /home/oracle/shell/load.log append   
     @/home/oracle/shell/load.sql;
     spool off
   QUIT
EOF
done

 

#用“@”执行sql文件时,如果每条sql后面要跟上“;”,如果有pl/sql代码,需要在最后加上“/”。

[oracle@toughhou shell]$ cat load.sql

create table student(

st_no   number primary key,
st_name varchar2(10)
);

insert into student(st_no,st_name) values(1001,"Tough1");

insert into student(st_no,st_name) values(1002,"Tough2");
insert into student(st_no,st_name) values(1003,"Tough3");
insert into student(st_no,st_name) values(1004,"Tough4");

alter table student add (age number);

create or replace procedure my_proc

as 
begin
    dbms_output.put_line("Date: " || sysdate);
end my_proc;
/

 

 

转载于:https://www.cnblogs.com/toughhou/p/3778784.html

你可能感兴趣的文章
PhysX概述
查看>>
软件包管理之yum
查看>>
你的php网页乱码了吗
查看>>
Linux常用的可插拔认证模块(PAM)pam_limits.so、pam_rootok.so和pam_userdb.so的详解
查看>>
医院物资管理系统
查看>>
鸟哥的Linux私房菜10.29 软件安装:RPM,SRPM与YUM功能
查看>>
秒杀系统架构优化思路
查看>>
delphi7 编译出现 internal error: T2335解决办法
查看>>
Keepalived+Lvs_DR模式实现Web服务的HA高可用集群
查看>>
PHPer 为什么会被 Javaer 鄙视?
查看>>
使用toFixed()函数时,出现“toFixed() is not a function”的解决办法
查看>>
页面布局设计
查看>>
计划任务crontab
查看>>
11月份个人技术指标
查看>>
LCM通信模块简介
查看>>
xpath之starts-with()
查看>>
CentOS 7 yum安装配置mysql
查看>>
前端协作流程
查看>>
MySQL5.7 用户权限配置
查看>>
NoSQL介绍(一)
查看>>