Oracle 使SQL*Plus脚本退出

Oracle 使SQL*Plus脚本退出,oracle,powershell,sqlplus,Oracle,Powershell,Sqlplus,我在一个目录中有一些SQL*Plus脚本,我想使用powershell自动运行这些脚本。我可以读取目录,但当我尝试执行脚本时,脚本终止,但没有退出powershell并转到下一个 如何使powershell退出SQL*Plus并自动转到下一个脚本,而无需通过在每个脚本末尾显式添加退出来修改脚本 下面是以最简单的形式演示的powershell脚本 $Filename=Get-childitem "D:\test\TestSQL" -Filter *.sql | Select -ExpandProp

我在一个目录中有一些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
}
$Filename=Get childitem“D:\test\TestSQL”-Filter*.sql | Select-ExpandProperty name
foreach($f in$Filename)
{
sqlplus-L-S/@$f
}
该目录理论上可以包含数百个脚本,在每个脚本中添加quit命令是不可行的。我想强制SQL*Plus在完成每个脚本后退出,并继续下一个脚本


有可能吗

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

/
据我所知,这告诉sqlplus执行上面的所有内容,没有它,sqlplus将不会终止

你说:

在每个脚本中添加quit命令是不可行的

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

幸运的是,PowerShell也能帮上忙。只需导航到包含脚本的目录并执行以下操作:

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

您可以将单词
exit
导入SQL*Plus命令行。例如,如果
demo.sql
包含以下内容:

prompt这是我的演示脚本
然后你可以这样称呼它:

echo退出| sqlplus-william/w@demo.sql
输出:

Y:\SQL>echo退出| sqlplus-william/w@demo.SQL
SQL*Plus:12.2.0.1.0版于2019年1月13日10:47:13发布
版权所有(c)1982年,2016年,Oracle。版权所有。
上次成功登录时间:2019年1月13日星期日10:46:03+00:00
连接到:
Oracle数据库12c企业版12.2.0.1.0版-64位生产
这是我的演示脚本
SQL>已断开与Oracle数据库12c Enterprise Edition 12.2.0.1.0版的连接-64位生产
Y:\SQL>
或者使用
-s
(静音)选项来抑制横幅等:

Y:\SQL>echo退出| sqlplus-s william/w@demo.SQL
这是我的演示脚本
Y:\SQL>
在Windows 10上使用SQL*Plus 12.2进行测试

(来自-事实证明它在Windows和Linux中都能工作。)


您还可以查看避免处理用户名和密码的选项,例如:

fyi、“PL/SQL”、“SQL”和“SQL*Plus”是三种不同的东西。我想你指的是SQL*Plus,它是用于运行查询等的命令行工具。@WilliamRobertson:谢谢你澄清术语。我对oracle非常陌生,认为PL/SQL和SQL Plus是相同的东西。我将更正措辞以避免混淆。是的,从您所说的来看,SQL*Plus似乎更合适。再次感谢。也许您可以动态构建一个临时SQL*Plus脚本,它调用每个.SQL脚本,然后在最后退出。它甚至可以通过打印文件名和时间戳来增加一些价值。顺便提一个好问题。@WilliamRobertson:构建一个脚本来运行一个脚本也很有效,但是你建议的方法肯定更干净更好。非常感谢!谢谢你,杰森。将在周一给它一个漩涡,让你知道。将您的响应标记为答案,以便其他人在遇到相同问题时可以方便地参考。缺少的
/
有时可能是一个问题,但添加一个不会使SQL*Plus在最后一个命令后退出。这是一个交互式提示,如
telnet
ftp
,您必须告诉它退出。@Jason Boyd:谢谢。你的建议有效,虽然它确实改变了脚本,但它有效!非常感谢你!!你的建议很管用。。干净高效。非常感谢。实际上,似乎通过管道将任何内容传输到Windows上的SQL*Plus会导致它退出,例如,|sqlplus un上的
echo set time/pw@db