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")
分享到:
相关推荐
Oracle存储过程调用bat批处理脚本程序,ORACLE调用OS【调用BAT脚本等】
NULL 博文链接:https://heisetoufa.iteye.com/blog/287301
pb中执行oracle存储过程脚本; 使用批处理进行oracle存储过程脚本的创建和更新的处理。 此程序在pb中进行实现;
############################################## #脚本文件名:clean_...#调用方式:可单独调用,或在job_clean_archivlog.sh脚本中根据需要调用见另外的附件) ##############################################
我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。 @与@@的区别是什么? @等于start命令,用来运行一个sql脚本文件。 @命令...
高性能 ——Oracle的性能特性对于在线业务和批处理程序非常有用。通过Direct Oracle Access,能够直接访问Oracle接口,从而使得标准的数据库访问函数实现性能最优。而该组件集还支持Array Fetching, Array DML, PL/...
解决办法是在 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...
比如说[想把最近一周内有所变化的数据库对象全部输出到SQL脚本][把处于无效状态的程序进行再编译]等这种用本来写好的SQL角本可以做成的工作,也会因数据库对象的增加而变得很繁琐.对于这一点来说,Object Browser...
其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位。 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),...
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 ...
我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。 @与@@的区别是什么? @等于start命令,用来运行一个sql脚本文件。 @命令...
实例016 设计Windows系统的运行对话框 界面 23 实例017 设计计算器程序界面 26 实例018 设计关于进销存管理系统的界面 27 第2章 Java基础应用 29 2.1 基本语法 30 实例019 输出错误信息与调试信息 30 实例020 从...
0866 控制批处理内语句的执行 513 0867 执行查询但是显示列信息 514 0868 获取连接或试图连接的次数 514 0869 获取当前数据库的语言名 514 19.5 时间与谓词 514 0870 时间函数的使用 514 0871 设置...
如果有多引导系统的计算机,必须保证是在包含 Windows 的驱动器上使用该命令。 Diskpart 创建和删除硬盘驱动器上的分区。diskpart 命令仅在使用故障恢复控制台时才可用。 diskpart [ /add |/delete] [device_...
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中的...
16 <br>0033 Return语句的使用 17 <br>0034 如何实现无限循环 17 <br>0035 巧用foreach语句控制控件 18 <br>0036 有效使用switch case语句 18 <br>2.3 运算符 19 <br>0037 如何使用...
您可能在使用 Visual FoxPro 6.0 或 5.0 自动 服务程序与 Microsoft Transaction Server 2.0 时还碰到过远程进程调用错误。如果有这样的情况,请确认您至少有 Transaction Server 2.0 的 Service Pack 1 或更高的...