2014-03-27 51 views
4

我必须一次运行多个SQL脚本文件。想要在SQLPLUS中一次运行多个SQL脚本文件

就像我每次都在sqlplus

 
SQL>@d:\a.txt 
SQL>@d:\a2.txt 
SQL>@d:\a3.txt 
SQL>@d:\a4.txt 

写命令时,有没有办法把所有的文件一个文件夹&运行一气呵成的所有脚本文件中,而不会错过像@d:\final.txt@d\final.bat

任何单个文件
+0

你试过windows批处理文件吗? (打开记事本,按顺序逐行写入命令),然后将文件保存为FileName.bat(确保从保存对话框的底部选择了“所有文件”选项。通过双击运行批处理文件可以解决问题。或者您可能需要在该bat文件中使用一些高级批处理命令 –

回答

5

没有单个SQL * Plus命令来做到这一点,但您可以创建一个调用所有其他脚本的脚本:

将以下内容放入批处理文件中

@echo off 
echo.>"%~dp0all.sql" 
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql" 

当您运行批处理文件,它会创建一个在批处理文件所在的同一目录中名为all.sql新的脚本。它将在批处理文件所在的同一目录中查找扩展名为.sql的所有文件。

然后,您可以运行使用sqlplus user/pwd @all.sql所有脚本(或扩展批处理文件创建all.sql脚本之后调用sqlplus

+0

@rahuljain:抱歉,我不知道您在说什么。 –

+0

我跑了批处理文件。 all.sql文件创建正常。我打开这个文件,这个文件的代码是“D:\ test_SQL \ Patch03.01.486.txt” @“D:\ test_SQL \ Patch03.01.487.txt” @“D:\ test_SQL \ Patch03.01.488.txt” 如果我运行文件像@ all.sql这会工作正常吗? 我必须在prod –

1

这里是类似的解决办法,但你不必迭代,并有特殊的格式化的SQL文件名称。你组成一个sql文件并运行一次。

cat table_animal.sql > /tmp/temp.sql 
cat table_horse.sql >> /tmp/temp.sql 
cat table_fish.sql >> /tmp/temp.sql 
sqlplus USERNAME/[email protected] @/tmp/temp.sql 
+1

中运行这个所有txt文件。同样,如果要连接目录中的所有SQL文件,可以使用'cat * .sql> temp.sql'。 – DavidS

0

一些技巧和命令可以帮助您生成master.sql文件,您可以从该位置运行。

c:\direcotory_location\dir *.sql /-t /b >master.sql 

去开master.sql打开使用记事本++ 删除master.sql线,并使用正则表达式的父目录替换

\n with \n @ 

去到CMD 从CMD

C:\root_directory\sqlplus user/password @master.sql 

我发现这个过程非常方便,如果我有30到40个脚本放在一个目录中。

1

如果您使用GNU Linux,你可以使用process substitution

sqlplus USERNAME/[email protected] < <(cat a.txt a2.txt a3.txt a4.txt) 
# ... or a for loop on input files, inside the process substitution 

或者,你可以创建一个.pdc文件,列出你的SQL脚本:

-- pdc file 
@a.txt; 
@a2.txt; 
@a3.txt; 
@a4.txt; 

和调用SQL加:

sqlplus USERNAME/[email protected] < my_scripts.pdc 
0

对于Windows请尝试 警察y/b * .sql + x final.sql

sqlplus user/password @ final.sql

相关问题