`

windows用批处理调用Oracle脚本

阅读更多
SPOOL时间的SQL脚本:
   
    spool time.txt
    select sysdate from dual; ----获取系统时间
    spool off exit 

    文件命名为time.sql,保存在D盘根目录下。
BAT文件:
    命名为test.bat sqlplus LIFE/LIFE_PWD@o122g4 @d:time.sql
执行完成后,产生一个time.txt文件:
SYSDATE                                                                         
--------------                                                                 
24-12月-09                                                                    

Usage: SPOOL { <file> | OFF | OUT }
where <file> is file_name[.ext] [CRE[ATE]|REP[LACE]|APP[END]]
SQL> exit 

那么执行多个sql脚本该怎么处理呢?下面做个实例:我们需要删除多个表,首先判断表是否存在,不存在的话直接create,否则drop table,这里有三个任务(CREATECONTRACTMASTER.SQL/CREATECONTRACTPRODUCT.SQL/CREATEGROUPPRODUCT.SQL);
一 准备SQL脚本:
1.CREATECONTRACTMASTER.SQL:
SPOOL CONTRACTMST.LOG 
DECLARE
   M_COUNT NUMBER;
 IF EXISTS(SELECT COUNT(1) INTO M_COUNT FROM ALL_ALL_TABLES WHERE TABLE_NAME = UPPER('T_CONTRACT_MASTER')) THEN
   DROP TABLE T_CONTRACT_MASTER;
 ELSE
   CREATE TABLE T_CONTRACT_MASTER(
   POL_ID NUMBER(10),
   POL_CODE VARCHAR2(20),
   CREATE_USER VARCHAR2(10),
   CREATE_DATE DATE,
   UPDATE_USER VARCHAR2(10),
   UPDATE_TIME DATE
  );
 END IF;
 SPOOL OFF
 EXIT;

2.CREATECONTRACTPRODUCT.SQL:
 
SPOOL CONTRACTPROD.LOG
  DECLARE
   M_COUNT NUMBER;
 IF EXISTS(SELECT COUNT(1) INTO M_COUNT FROM ALL_ALL_TABLES WHERE TABLE_NAME = UPPER('T_CONTRACT_PRODUCT')) THEN
   DROP TABLE T_CONTRACT_PRODUCT;
 ELSE 
   CREATE TABLE T_CONTRACT_PRODUCT(
   PRD_ID NUMBER(10),
   PRD_NAME VARCHAR2(20),
   POL_ID NUMBER(10),
   CREATE_USER VARCHAR2(10),
   CREATE_DATE DATE,
   UPDATE_USER VARCHAR2(10),
   UPDATE_TIME DATE
  );
 END IF; 
 SPOOL OFF
 EXIT;

3.CREATEGROUPPRODUCT.SQL:
SPOOL GROUPPRD.LOG  
DECLARE
   M_COUNT NUMBER;
 IF EXISTS(SELECT COUNT(1) INTO M_COUNT FROM ALL_ALL_TABLES WHERE TABLE_NAME = UPPER('T_GROUP_PRODUCT')) THEN
   DROP TABLE T_GROUP_PRODUCT;
 ELSE
   CREATE TABLE T_GROUP_PRODUCT(
   PRD_ID NUMBER(10),
   POL_ID NUMBER(10),
   CREATE_USER VARCHAR2(10),
   CREATE_DATE DATE,
   UPDATE_USER VARCHAR2(10),
   UPDATE_TIME DATE
  );
 END IF;
 SPOOL OFF
 EXIT;

二 编写批处理命令文件(EXECSQL.BAT):批处理命令文件与SQL脚本最好放置在同一目录下,这样,可以设置成相对路径。否则,用绝对路径在执行时可能比较麻烦。
 
EXECSAL.BAT:
  SQLPLUS LIFE/LIFE_PWD@o122g4;
  @CREATECONTRACTMASTER.SQL
  @CREATECONTRACTPRODUCT.SQL
  @CREATEGROUPPRODUCT.SQL
  EXIT;

  当然,通常会把所有的脚本重新用一个sql脚本组合起来,然后用批处理命令调用这个SQL脚本即可。
  注意:如果是需要传递值,直接将参数放到SPOOL的脚本中。
SET TERMOUT OFF ----显示脚本中的命令的执行结果,缺省为on
SET NEWPAGE 1
SET SPACE 0
SET PAGESIZE 0 --输出每页行数,缺省为24,为了避免分页,可设定为0。
SET ECHO OFF ---显示start启动的脚本中的每个sql命令,缺省为on
SET FEEDBACK OFF --回显本次sql命令处理的记录条数,缺省为on

SET VERIFY OFF --设置是否显示替代变量被替代前后的语句
SET HEADING OFF ---输出域标题,缺省为on
SET MARKUP HTML OFF  ---html 元素标签开关 打开
SPOOL OFF
SET TRIMSPOOL ON ---去除重定向(spool)输出每行的拖尾空格,缺省为off
SET TRIMOUT ON  ---去除标准输出每行的拖尾空格,缺省为off

-- spool 到当前目录中
spool output.tmp
spool off
-- 构造查询语句
@@output.tmp
set colsep' ' ---域输出分隔符

当然,还有一种方法,就是用VBA产生脚本。以下脚本没有验证过!
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")'创建脚本对象
Set oExec = WshShell.Exec("sqlplus -S LIFE/LIFE@O122G4  @D:\a.sql")'-s是不回显,然后跟用户名和密码,之后是sql语句路径
Set oExec = WshShell.Exec("sqlplus -S scott/tiger @D:\b.sql")
1
1
分享到:
评论

相关推荐

    Oracle存储过程调用bat批处理脚本程序

    Oracle存储过程调用bat批处理脚本程序,ORACLE调用OS【调用BAT脚本等】

    oracle利用批处理文件执行SQL语句,bat连接oracle数据库并执行语句

    NULL 博文链接:https://heisetoufa.iteye.com/blog/287301

    pb中执行oracle存储过程脚本

    pb中执行oracle存储过程脚本; 使用批处理进行oracle存储过程脚本的创建和更新的处理。 此程序在pb中进行实现;

    自动删除ORACLE归档日志文件

    ############################################## #脚本文件名:clean_...#调用方式:可单独调用,或在job_clean_archivlog.sh脚本中根据需要调用见另外的附件) ##############################################

    Oracle数据库执行脚本常用命令小结

    我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。 @与@@的区别是什么? @等于start命令,用来运行一个sql脚本文件。 @命令...

    Direct Oracle Access v4.1.3 bcb6

    高性能 ——Oracle的性能特性对于在线业务和批处理程序非常有用。通过Direct Oracle Access,能够直接访问Oracle接口,从而使得标准的数据库访问函数实现性能最优。而该组件集还支持Array Fetching, Array DML, PL/...

    64位操作系统下,使用PB、 PL/SQL 连接64位Oracle的方法

    解决办法是在 PL/SQL、PB 安装目录下建立一个 run.bat 批处理文件,以 PB 为例脚本如下: ``` @echo off set path=D:\instantclient_11_2;%PATH% set ORACLE_HOME=D:\instantclient_11_2 set TNS_ADMIN=D:\instant...

    Object Browser7.0中文版(ORACLE数据库的开发工具)

    比如说[想把最近一周内有所变化的数据库对象全部输出到SQL脚本][把处于无效状态的程序进行再编译]等这种用本来写好的SQL角本可以做成的工作,也会因数据库对象的增加而变得很繁琐.对于这一点来说,Object&nbsp;Browser...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位。 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),...

    oracle数据库dba管理手册

    8.8.2 使用远程过程调用 222 8.9 使用OEM和性能调整组件 224 8.9.1 Oracle Expert组件 224 8.9.2 Oracle性能管理器选项 227 8.10 调整方案 229 第9章 数据库安全与审计 231 9.1 安全性能 231 9.1.1 帐户安全性 231 ...

    sqlplus命令的使用大全

    我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。 @与@@的区别是什么? @等于start命令,用来运行一个sql脚本文件。 @命令...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例016 设计Windows系统的运行对话框 界面 23 实例017 设计计算器程序界面 26 实例018 设计关于进销存管理系统的界面 27 第2章 Java基础应用 29 2.1 基本语法 30 实例019 输出错误信息与调试信息 30 实例020 从...

    C#开发经验技巧宝典

    0866 控制批处理内语句的执行 513 0867 执行查询但是显示列信息 514 0868 获取连接或试图连接的次数 514 0869 获取当前数据库的语言名 514 19.5 时间与谓词 514 0870 时间函数的使用 514 0871 设置...

    网管教程 从入门到精通软件篇.txt

    如果有多引导系统的计算机,必须保证是在包含 Windows 的驱动器上使用该命令。 Diskpart  创建和删除硬盘驱动器上的分区。diskpart 命令仅在使用故障恢复控制台时才可用。  diskpart [ /add |/delete] [device_...

    javaSE代码实例

    6.6.2 用空引用进行调用 88 6.6.3 数组的空引用问题 89 6.7 局部变量 89 6.7.1 局部变量的作用域 89 6.7.2 局部变量的初始化 90 6.8 this预定义对象引用 92 6.9 擅用系统已有的类 94 6.9.1 Java中的...

    C#编程经验技巧宝典

    16 &lt;br&gt;0033 Return语句的使用 17 &lt;br&gt;0034 如何实现无限循环 17 &lt;br&gt;0035 巧用foreach语句控制控件 18 &lt;br&gt;0036 有效使用switch case语句 18 &lt;br&gt;2.3 运算符 19 &lt;br&gt;0037 如何使用...

    vfp6.0系统免费下载

    您可能在使用 Visual FoxPro 6.0 或 5.0 自动 服务程序与 Microsoft Transaction Server 2.0 时还碰到过远程进程调用错误。如果有这样的情况,请确认您至少有 Transaction Server 2.0 的 Service Pack 1 或更高的...

Global site tag (gtag.js) - Google Analytics