我想使用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在完成每个脚本之后退出,然后转到下一个脚本。
有可能这样做吗?
发布于 2019-01-13 10:57:35
您可以将单词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
发布于 2019-01-12 07:22:22
我并不熟悉plsql,但据我所知,sqlplus是一个执行plsql脚本的exe。如果PowerShell没有继续执行下一个脚本,那是因为sqlplus没有退出。稍微谷歌一下就会发现,结束pssql脚本的正确方法是在最后一行中放置一个正斜杠:
/据我所知,这告诉sqlplus执行上面的所有内容,如果没有sqlplus,sqlplus不会终止。
你说:
在每个脚本中添加退出命令是不可行的。
但据我所知,这正是你必须做的。
幸运的是,PowerShell也可以在这方面提供帮助。只需导航到包含脚本的目录并执行以下操作:
dir *.sql | add-content -value "/"https://stackoverflow.com/questions/54153384
复制相似问题