使 SQL*Plus 脚本退出

Make SQL*Plus script quit

我在目录中有一些 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
}

该目录理论上可以包含数百个脚本,在每个脚本中添加退出命令是不可行的。我想强制 SQL*Plus 在完成每个脚本后退出并继续下一个脚本。

可以吗?

我不熟悉 plsql,但我了解到 sqlplus 是一个执行 plsql 脚本的 exe。如果 PowerShell 没有继续执行下一个脚本,那是因为 sqlplus 没有退出。谷歌搜索表明结束 pssql 脚本的正确方法是在最后一行放置一个正斜杠:

/

根据我的理解,这告诉 sqlplus 执行上面的所有操作,没有它 sqlplus 将不会终止。

你说:

it is not feasible to add quit command in each script

但据我所知,这正是您必须做的。

幸运的是 PowerShell 也可以提供帮助。只需导航到包含脚本的目录并执行以下命令:

dir *.sql | add-content -value "/"

您可以将单词 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