我必须一次运行多个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 :(得分: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)
答案 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脚本所在的目录