DOS/sqlplus“句柄无效”错误?

Posted

技术标签:

【中文标题】DOS/sqlplus“句柄无效”错误?【英文标题】:DOS/sqlplus "Handle is invalid" error? 【发布时间】:2009-12-09 21:30:27 【问题描述】:

我有以下批处理脚本:

sqlplus ms/ms@orcl < drop.sql
sqlplus ms/ms@orcl < create.1.0.sql

当我在 Windows 资源管理器中双击 bat 文件并运行它时,它可以正常工作。

但是当我在 DOS 提示符下输入命令名时,我得到一个错误:

C:\>create.bat

C:\>sqlplus ms/ms@orcl  0<drop.sql
The handle is invalid.

C:\>sqlplus ms/ms@orcl  0<create.1.0.sql
The handle is invalid

有什么想法吗?


更新:更改为使用@ 而不是&lt;。这解决了错误,但现在脚本只执行第一个文件,然后将您留在SQL&gt; 提示符处。要执行第二个文件,您必须在提示符下键入exit,然后第二个文件运行。不知道如何让两个文件都执行。 ??

【问题讨论】:

看起来您从命令行运行的批处理脚本有一些额外的 0。 0 是无效句柄,因此是错误消息。使用 shoover 的解决方案 - @ 是 sqlplus 的一个参数,告诉它运行给定的 sql 脚本。 试过了,不是运气。更新帖子。 在 Jason 的回答下方查看我的评论。 【参考方案1】:

如果您希望 SQL*PLUS 执行脚本,比命令行重定向更好的方法是 @ 语法:

sqlplus ms/ms@orcl @drop.sql
sqlplus ms/ms@orcl @create.1.0.sql

还阅读了@@ 语法,您可以使用它从同一目录中的另一个 .sql 脚本执行 .sql 脚本。

SQL> help @
SQL> help @@

【讨论】:

我所做的是创建一个新的create.sql 脚本,它调用我的两个脚本。我使用@ 符号执行create.sql【参考方案2】:

更改为使用@ 而不是 迅速的。获取第二个文件 执行你必须在 提示,然后第二个文件运行。不是 确定如何让两个文件都执行。 ??

我最终编写了一个 python 脚本来运行 sql plus,然后退出它来解决这个问题。我还没有找到解决这个限制的任何方法。虽然如果您按照建议使用@@,则只需处理一次该问题。您只需从第一个脚本运行第二个脚本。

【讨论】:

如果您知道您将仅从 SQLPLUS 运行脚本,您可以添加 QUIT;命令位于脚本底部。这会导致 SQLPLUS 退出。

以上是关于DOS/sqlplus“句柄无效”错误?的主要内容,如果未能解决你的问题,请参考以下文章

关闭 websocket 时出现 SignalR 错误 - 句柄无效

错误6句柄在Windows上写入文件无效[关闭]

sql serve2012安装程序遇到以下错误 句柄无效 怎么办

带有 Qt5 执行错误的 OpenSplice 创建失败:句柄无效

pyomo + reticulate 错误6句柄无效

如何修复“[错误 6] 句柄无效。”使用 PySerial