想在SQLPLUS中一次运行多个SQL脚本文件

时间:2014-03-27 07:25:03

标签: 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

8 个答案:

答案 0 :(得分:10)

没有单一的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运行所有脚本(或在创建sqlplus脚本后扩展批处理文件以调用all.sql

答案 1 :(得分:2)

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

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

使用notepad ++转到打开master.sql的父目录  删除master.sql行并使用正则表达式替换

   \n  with \n @

转到cmd 来自cmd

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

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

答案 2 :(得分:2)

可能值得花时间编写一个运行多个文件的shell脚本。

#!/bin/ksh
sqlplus user/password@instance <<EOF
@a.txt
@a1.txt
exit
EOF

有关语法的更多信息,请查看Here Document

答案 3 :(得分: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/PASSWORD@DOMAIN @/tmp/temp.sql

答案 4 :(得分:1)

如果你正在使用gnu linux,你可以使用process substitution

sqlplus USERNAME/PASSWORD@DOMAIN < <(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 plus:

sqlplus USERNAME/PASSWORD@DOMAIN < my_scripts.pdc

答案 5 :(得分:1)

对于Windows试试 copy / b * .sql + x final.sql

sqlplus user / password @ final.sql

答案 6 :(得分:0)

特别感谢 Joseph Torre

sqlplus login/password@server @filename

reference link

答案 7 :(得分:0)

像这样使用*.PDC扩展名文件

install.pdc 文件内容

whenever sqlerror exit sql.sqlcode

prompt started!

prompt 1.executing script 1
@@install/01.script_1.sql

prompt 2.executing script 2
@@install/02.script_2.sql

prompt 3.executing script 3
@@install/03.script_3.sql

prompt finished!

@@install/指向SQL脚本所在的目录