JoshL Asked: 2008-09-23 15:33:09 +0800 CST2008-09-23 15:33:09 +0800 CST 2008-09-23 15:33:09 +0800 CST 运行 Oracle SQL 脚本并通过命令提示符退出 sqlplus.exe 772 我想通过 Windows 命令提示符通过 SQL Plus 运行 Oracle 脚本。该脚本不包含“退出”命令,但我仍然希望 SQL Plus 退出,在脚本完成后将控制权返回到命令提示符。我的目标是在不修改脚本的情况下做到这一点。这可能吗? command-line-interface oracle sqlplus 11 个回答 Voted Best Answer Dave Costa 2008-09-24T04:28:51+08:002008-09-24T04:28:51+08:00 另一种方法是在批处理文件中使用此命令: echo exit | sqlplus user/pass@connect @scriptname user142847 2012-10-27T04:21:03+08:002012-10-27T04:21:03+08:00 我发现这是最好的解决方案,它可以在终端或脚本中工作: echo @scriptname | sqlplus username/password@connect Chris Noe 2008-09-24T08:04:00+08:002008-09-24T08:04:00+08:00 现在意识到您的问题可能出在 sql 文件本身,意识到需要告知 sqlplus 退出。我这样做的方法是: 从对偶中选择 *; 退出; / (斜线很重要。它告诉 sqlplus 执行上面的 statemet。) girish 2012-03-19T13:20:01+08:002012-03-19T13:20:01+08:00 隐藏用户信息和退出的最佳方法是: exit | sqlplus -S user/pwd@server @script.sql exit提供给 sqlplus 的输出,强制它退出。-S抑制脚本中除 sql 查询之外的所有服务器输出。 Ethan Post 2008-09-24T04:33:44+08:002008-09-24T04:33:44+08:00 您也可以在您的 shell 脚本中执行此操作。 sqlplus /nolog <<EOF connect user/pass @run_some_file.sql select * from dual; EOF 您可能需要转义“;” 带\。 Charles Duffy 2008-09-23T15:40:53+08:002008-09-23T15:40:53+08:00 是的,这是可能的——生成一个适当设置 SQLPlus 的包装脚本,包括您的脚本(即。@YourTargetScript.sql),然后退出。 也就是说,我根本不推荐这种方法——SQLPlus 有很多程序化使用的陷阱。在过去编写使用 Oracle 的 shell 脚本时,我围绕它构建了一个 Python 包装器(添加了更合理的错误处理行为、stdout/stderr 之间的合理输出分离、原生 CSV 输出支持和其他类似的好东西),并且有效好多了。 Chris Noe 2008-09-23T15:43:47+08:002008-09-23T15:43:47+08:00 像这样: sqlplus /nolog 用户名/密码@tnsname @filename 如果你把它放在一个批处理文件中,控制将继续它后面的语句。 编辑:我的错,再试一次 /nolog 标志 user128494 2012-07-17T11:38:31+08:002012-07-17T11:38:31+08:00 对于那些担心将密码包含在脚本中的安全性的人,AskTom 有一篇关于“外部识别”的文章 http://asktom.oracle.com/pls/apex/f?p=100:11:0:::: P11_QUESTION_ID:142212348066 Ameen 2009-06-20T12:40:10+08:002009-06-20T12:40:10+08:00 在您的 SQL 脚本中添加 EXIT。这是我的 test.bat 文件的示例,其中包含以下内容: sqlplus 用户/pwd@server @test.SQL > myLOG.LOG 我的 test.sql 文件有以下内容: select * from dual; 出口 Olaf Dietsche 2020-04-18T01:29:00+08:002020-04-18T01:29:00+08:00 另一个用于 Linux 的没有管道或分叉另一个子 shell/进程 sqlplus -S dbuser/dbpasswd@dbsid @scriptname </dev/null 完成后@scriptname,sqlplus 等待用户输入。在这种情况下,sqlplus 读取文件末尾/dev/null并退出,因此。
另一种方法是在批处理文件中使用此命令:
我发现这是最好的解决方案,它可以在终端或脚本中工作:
现在意识到您的问题可能出在 sql 文件本身,意识到需要告知 sqlplus 退出。我这样做的方法是:
(斜线很重要。它告诉 sqlplus 执行上面的 statemet。)
隐藏用户信息和退出的最佳方法是:
exit
提供给 sqlplus 的输出,强制它退出。-S
抑制脚本中除 sql 查询之外的所有服务器输出。您也可以在您的 shell 脚本中执行此操作。
您可能需要转义“;” 带\。
是的,这是可能的——生成一个适当设置 SQLPlus 的包装脚本,包括您的脚本(即。
@YourTargetScript.sql
),然后退出。也就是说,我根本不推荐这种方法——SQLPlus 有很多程序化使用的陷阱。在过去编写使用 Oracle 的 shell 脚本时,我围绕它构建了一个 Python 包装器(添加了更合理的错误处理行为、stdout/stderr 之间的合理输出分离、原生 CSV 输出支持和其他类似的好东西),并且有效好多了。
像这样:
如果你把它放在一个批处理文件中,控制将继续它后面的语句。
编辑:我的错,再试一次 /nolog 标志
对于那些担心将密码包含在脚本中的安全性的人,AskTom 有一篇关于“外部识别”的文章 http://asktom.oracle.com/pls/apex/f?p=100:11:0:::: P11_QUESTION_ID:142212348066
在您的 SQL 脚本中添加 EXIT。这是我的 test.bat 文件的示例,其中包含以下内容:
sqlplus 用户/pwd@server @test.SQL > myLOG.LOG
我的 test.sql 文件有以下内容: select * from dual; 出口
另一个用于 Linux 的没有管道或分叉另一个子 shell/进程
完成后
@scriptname
,sqlplus 等待用户输入。在这种情况下,sqlplus 读取文件末尾/dev/null
并退出,因此。