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