【发布时间】:2019-06-06 18:44:26
【问题描述】:
我想使用 powershell 自动运行一个目录中的一些 SQL*Plus 脚本。我可以读取目录,但是当我尝试执行脚本时,脚本终止但没有退出 powershell 并转到下一个。
如何让 powershell 退出 SQL*Plus 并自动转到下一个脚本,而无需通过在每个脚本末尾显式添加退出来修改脚本?
下面是最简单形式的图解说明的 powershell 脚本
$Filename=Get-childitem "D:\test\TestSQL" -Filter *.sql | Select -ExpandProperty name
foreach ($f in $Filename)
{
sqlplus -L -S <username>/<password>@<sid> @$f
}
该目录理论上可以包含数百个脚本,在每个脚本中添加退出命令是不可行的。我想在完成每个脚本后强制 SQL*Plus 退出并继续下一个。
可以这样做吗?
【问题讨论】:
-
仅供参考,“PL/SQL”、“SQL”和“SQL*Plus”是三个不同的东西。我认为您的意思是 SQL*Plus,它是用于运行查询等的命令行工具。
-
@WilliamRobertson:感谢您澄清术语。我对 oracle 很陌生,并认为 PL/SQL 和 SQL Plus 是相同的东西。我将更正措辞以避免混淆。是的,从您所说的来看,SQL*Plus 似乎更合适。再次感谢。
-
也许您可以即时构建一个临时 SQL*Plus 脚本,该脚本调用每个 .sql 脚本,然后在最后退出。它甚至可以通过打印文件名和时间戳来增加一些价值。
-
实际上,我在serverfault.com/q/87035/352734 上找到了更好的方法 - 刚刚添加了答案。顺便说一句,好问题。
-
@WilliamRobertson:构建脚本来运行脚本也可以,但您建议的方法肯定更干净、更好。非常感谢!
标签: oracle powershell sqlplus