package com.sky.read;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class PLSQL {
public static void main(String[] args) {
FileOutputStream fos = null;
InputStream in = null;
Process p=null;
try {
String cmd = "sqlplus gts1031/gts1031@ORACL @init-6.0.01.sql >D:/gts1031.log";
Runtime rt = Runtime.getRuntime();
p = rt.exec(cmd,null,new File("D:/db/integrate/"));
in = p.getInputStream();
fos = new FileOutputStream("D:/gts1031.log");
byte[] b = new byte[1024];
int br = 0;
while ((br = in.read(b)) != -1) {
fos.write(b, 0, br);
}
p.waitFor();
System.out.println("执行结束");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
p = rt.exec(cmd,null,new File("D:/db/integrate/"));
new File(D:/db/integrate/)指定了子进程的工作目录,这样sql脚本里的引用其他文件是就可以使用相对路径.相当于在cmd下,切换到相映脚本的目录,再执行sqlplus,这样sqlplus执行的sql脚本中引用其他文件时可以使用相对路径
package com.sky.read;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class PLSQL {
public static void main(String[] args) {
new PLSQL().exeSqlplus("gts1031", "gts1031", "ORACL",
"init-6.0.01.sql", "D:/db/integrate/", "D:/DBLOGS/",
"gts1031.log");
}
public void exeSqlplus(String username, String password, String host,
String fileName, String dir, String logdir, String logFileName) {
FileOutputStream fos = null;
InputStream in = null;
Process p = null;
try {
StringBuffer sb = new StringBuffer();
sb.append("sqlplus ");
sb.append(username);
sb.append("/");
sb.append(password);
sb.append("@");
sb.append(host);
sb.append(" @");
sb.append(fileName);
// String cmd =
// "sqlplus gts1031/gts1031@ORACL @init-6.0.01.sql >D:/gts1031.log";
String cmd = sb.toString();
Runtime rt = Runtime.getRuntime();
// p = rt.exec(cmd,null,new File("D:/db/integrate/"));
p = rt.exec(cmd, null, new File(dir));
in = p.getInputStream();
File file = new File(logdir);
if (!file.exists()) {
file.mkdir();
}
// fos = new FileOutputStream("D:/gts1031.log");
fos = new FileOutputStream(logdir + logFileName);
byte[] b = new byte[512];
int br = 0;
while ((br = in.read(b)) != -1) {
String str = new String(b, 0, br);
int i = str.indexOf("SP2-0310");
int j = str.indexOf("SQL>");
fos.write(b, 0, br);
if (i != -1) {
p.destroy();
System.out.println("执行中断:" + str);
}
if (j != -1) {
p.destroy();
System.out.println("成功执行");
}
}
p.waitFor();
fos.flush();
fos.close();
in.close();
p.destroy();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
在日常的数据库管理工作中,经常需要对数据库进行批量操作,例如批量执行SQL脚本、更新存储过程等。在这些场景下,使用Oracle提供的命令行工具SQLPlus来批量执行SQL文件是一种非常实用且高效的方法。 #### 一、准备...
3. **PowerShell**:对于更高级的自动化需求,PowerShell可以用来调用SQL Server的Smo库或其他API来执行SQL脚本。通过创建一个脚本,遍历指定目录下的所有SQL文件并执行它们,可以实现批量执行。 4. **编程语言集成...
2. **创建Shell脚本**:接下来,创建一个Shell脚本来调用Oracle客户端工具(如sqlplus)并执行SQL脚本。Shell脚本(ss.sh)中包含了执行日期的记录、输出文件路径的设定以及调用SQL脚本的具体命令。 3. **设置...
在IT领域,尤其是在系统管理和自动化任务执行中,Shell脚本和SQL脚本的使用非常普遍。它们能够有效地处理日常的任务,比如数据处理、系统管理等。这篇文章将详细讲解如何向Shell或SQL脚本传递参数以及如何在脚本中...
3. **SQL脚本执行**:允许用户编写和运行含有多个SQL语句的脚本文件。 4. **结果集查看**:提供友好的结果集显示,包括排序、分页和格式化输出。 5. **PL/SQL支持**:对于Oracle数据库,能够执行存储过程和函数。 6....
3. **SQL脚本执行**:在`sqlplus`命令后,使用`@`符号跟上SQL脚本的路径,例如`@createTable.sql`,来执行脚本。 4. **错误处理**:通过`if`语句检查SQL脚本的执行结果,捕获可能的错误信息。 5. **日志记录**:为了...
在Windows环境下,可以创建批处理文件`.bat`,将上述命令行工具的调用写入其中,然后运行该文件以批量执行SQL脚本。 3. **使用源码管理工具**: 对于团队协作,可以将SQL脚本存放在版本控制系统(如Git)中,通过...
1. **SQLinForm.jar**:这是一个Java可执行的jar文件,很可能就是核心的SQL格式化工具。用户可以通过运行这个jar包来对SQL语句进行格式化操作。只需输入待格式化的SQL文本,工具就会返回格式化后的结果。 2. **Demo...
要实现批量执行,可以创建一个主SQL脚本(如`run_all.sql`),在这个脚本中,你可以通过嵌套`@`命令来调用其他SQL文件,同时传递参数。例如: ```sql DECLARE param1 VARCHAR2(100) := 'param_value1'; param2 ...
在实际应用中,为了增加可读性和维护性,通常会将SQL语句写入单独的脚本文件(如`.sql`文件),然后在批处理文件中调用它们,例如: ```cmd @echo off sqlplus system/manager@localhost:1521/orcl @sql_script.sql...
Oracle SQL Plus是一款强大的命令行工具,专为Oracle数据库系统设计,用于执行SQL查询、脚本和数据库管理任务。尽管它的原始界面是基于终端的,但Java版本的Oracle SQL Plus为用户提供了更现代、跨平台的体验。这个...
为了处理这些问题,你可以使用sqlplus的反馈和错误处理机制。例如,使用`WHENEVER SQLERROR EXIT SQLCODE`命令可以在遇到错误时停止脚本执行。 6. **日志记录**:为了追踪和调试,建议在执行脚本时启用日志记录。在...
SQLPLUS支持通过`START`或`@`命令来执行存储在文本文件中的SQL脚本,极大地提高了效率。例如: ```sql SQL> START file_name SQL> @file_name ``` 这两个命令等效,用于执行名为`file_name.sql`的脚本文件。这种...
在sqlplus中执行sql语句,如果直接使用命令行的方式调用时会碰到两个问题: 问题1: 需要进行交互性的输入 问题2:结果的判断不能通过返回值来确认 解决方式 在脚本调用里,解决方式如下 问题1可以通过前文提到的...
以system身份登录sqlplus,再执行安装脚本helpbld.sql或hlpbld.sql均可。我们在执行脚本的时候需要输入两个参数 SQL> @?/sqlplus/admin/help/helpbld.sql 输入 1 的值: $ORACLE_HOME/sqlplus/admin/help --帮助...
在Oracle数据库管理中,了解和熟练使用SQL查询语言和SQL*Plus工具是至关重要的。本文将深入探讨"Oracle常用函数"以及"SQL*Plus基本命令"这两个关键领域,旨在帮助你提升在数据库操作中的效率。 一、Oracle常用函数 ...
在实际操作中,SQL脚本可以使用文本编辑器创建,然后通过数据库管理工具或命令行界面执行。例如,在MySQL中,可以使用`source`命令来运行SQL脚本: ``` mysql -u username -p database_name < script.sql ``` 在...
这份手册将帮助你深入理解和高效使用SQLPLUS。 SQLPLUS的使用主要涉及以下几个方面: 1. **连接数据库**:通过`sqlplus username/password@database`命令连接到指定的Oracle数据库,其中username是用户名,...