使SQL * Plus脚本退出

时间:2019-01-11 20:08:11

标签: oracle powershell sqlplus

我在一个目录中有一些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退出。

有可能这样做吗?

2 个答案:

答案 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