windows⽤批处理调⽤Oracle脚本
SPOOL时间的SQL脚本:
    select sysdate from dual; ----获取系统时间    spool off exit
⽂件命名为time.sql,保存在D盘根⽬录下。
BAT⽂件:
命名为test.bat sqlplus LIFE/LIFE_PWD@o122g4 @d:time.sql
执⾏完成后,产⽣⼀个⽂件:
SYSDATE                                                                        --------------                                                                24-12⽉-09
批处理文件怎么做那么执⾏多个sql脚本该怎么处理呢?下⾯做个实例:我们需要删除多个表,⾸先判断表是否存在,不存在的话直接create,否则drop table,
这⾥有三个任务(CREATECONTRACTMASTER.SQL/CREATECONTRACTPRODUCT.SQL/CREATE
GROUPPRODUCT.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_NA
2.CREATECONTRACTPRODUCT.SQL:
SPOOL CONTRACTPROD.LOG  DECLARE  M_COUNT NUMBER; IF EXISTS(SELECT COUNT(1) INTO M_COUNT FROM ALL_ALL_TABLES WHERE
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
⼆ 编写批处理命令⽂件(EXECSQL.BAT):批处理命令⽂件与SQL脚本最好放置在同⼀⽬录下,这样,可以设置成相对路径。否则,⽤绝对
路径在执⾏时可能⽐较⿇烦。
EXECSAL.BAT:  SQLPLUS LIFE/LIFE_PWD@o122g4;  @CREATECONTRACTMASTER.SQL  @CREATECONTRACTPRODUCT.SQL  @CREATEGROUPPRODU
当然,通常会把所有的脚本重新⽤⼀个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 到当前⽬录中
p
spool off
-- 构造查询语句
@@p
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")

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。