我在一个目录中有一些SQL * Plus脚本,我想使用Powershell自动运行它们。我可以读取目录,但是当我尝试执行脚本时,脚本终止了,但没有退出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
}
理论上该目录可以包含数百个脚本,并且在每个脚本中添加quit命令是不可行的。我想在完成每个脚本并继续进行下一个脚本后强制SQL * Plus退出。
有可能这样做吗?
答案 0 :(得分:1)
我不熟悉plsql,但是我收集到sqlplus是一个执行plsql脚本的exe。如果PowerShell无法继续执行下一个脚本,那是因为sqlplus没有退出。稍作谷歌搜索就可以发现,结束pssql脚本的正确方法是在最后一行加上一个正斜杠:
/
据我了解,这告诉sqlplus执行上述所有操作,否则,sqlplus不会终止。
您说:
在每个脚本中添加退出命令是不可行的
但是据我所知,这正是您要做的。
幸运的是,PowerShell也可以提供帮助。只需导航到包含脚本的目录并执行以下命令即可:
dir *.sql | add-content -value "/"
答案 1 :(得分:1)
您可以将单词exit
传递到SQL * Plus命令行中。例如,如果demo.sql
包含以下内容:
prompt This is my demo script
然后您可以这样称呼它:
echo exit | sqlplus william/w @demo.sql
输出:
Y:\SQL>echo exit | sqlplus william/w @demo.sql
SQL*Plus: Release 12.2.0.1.0 Production on Sun Jan 13 10:47:13 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Last Successful login time: Sun Jan 13 2019 10:46:03 +00:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
This is my demo script
SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Y:\SQL>
或使用-s
(静默)选项禁止显示横幅等:
Y:\SQL>echo exit | sqlplus -s william/w @demo.sql
This is my demo script
Y:\SQL>
在Windows 10上使用SQL * Plus 12.2进行了测试。
(从https://serverfault.com/q/87035/352734起-事实证明它在Windows和Linux中都可以使用。)
您还可以查看一些避免处理用户名和密码的选项,例如此处:https://dba.stackexchange.com/a/109170/103604