powershell/sqlplus 错误 SP2-0042:未知命令“■@” - 忽略行的其余部分

Posted

技术标签:

【中文标题】powershell/sqlplus 错误 SP2-0042:未知命令“■@” - 忽略行的其余部分【英文标题】:powershell/sqlplus error SP2-0042: unknown command " ■@" - rest of line ignored 【发布时间】:2012-07-24 13:27:18 【问题描述】:

我在 powershell 中运行这个命令:

sqlplus system/passwd@mydb  @my_sql

我已经尝试过使用和不使用反引号以及通过 Google 找到的各种其他版本。当命令传递给 sqlplus 并且无法成功找到修复程序时,我不断收到错误消息。希望这里有人能帮忙?

我得到的错误是:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SP2-0042: unknown command " ■@" - rest of line ignored.

所以我成功连接到数据库,但是在“@”前面有一个额外的字符被传递给 sqlplus。 notepad++ 中的“ ■@”看起来像“ ¦@”

【问题讨论】:

【参考方案1】:

如果您在 powershell 中使用重定向(> 或 >>)创建了 SQL 命令文件 - 例如:

myProgram > mySQL.out 然后像这样运行它: &sqlplus mypw/myuser@mydb.xyz.com "@mySQL.out"

Powershell 可能将输出文件保存为 UTF-16 格式,Sqlplus 不喜欢这种格式。 (您可以通过手动创建完全相同的文件然后进行比较来确认 - 字节数将关闭,在 KDiff 中您将收到消息,表明文本相等,但文件不是二进制相等的)。

要修复 - 您需要做两件事::

    在 SQL 命令的顶部添加一些空白行 - Powershell 仍会在此处写入 BOM(字节顺序标记),看起来很难避免这种情况 - 但 sqlplus 会通过它,尽管给出一个错误 - 但会继续你的代码的其余部分。 然后在创建文件之前在 powershell 中运行此命令:$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'

见Changing PowerShell's default output encoding to UTF-8

我收到此错误: SP2-0042:未知命令“■S” - 忽略行的其余部分。 这解决了这个问题 - 或者至少我能够运行它。您也可以使用 Notepad++ 将其从一个窗口剪切并粘贴到另一个窗口,这将解决 BOM 和编码问题。

【讨论】:

【参考方案2】:

更新问题已解决。原来这是“穿过森林看不到树木”。我已经使用这些 sql 脚本几年了,没有从 bash 脚本调用的问题。当我尝试将 bash 脚本转换为 powershell 并遇到问题时,我将其归咎于 powershell。然而;事实证明,sql文件本身有一些损坏。在 notepad++ 中查看文件时,即使单击显示所有符号并且它是 ANSI 格式,也没有明显的错误。当我从 cmd 窗口手动运行 sqlplus 时,我确定它是 sql 文件本身,但我仍然遇到与 powershell 相同的错误。我重写了脚本并保存了它,问题得到了解决。我应该在第一天手动运行脚本,我可能会早点解决。

【讨论】:

【参考方案3】:

我遇到了同样的问题。我的问题是由于脚本文件保存为 unicode 引起的。我不知道这是否对您有帮助,但这是我修复它的方法:

使用记事本编辑脚本。单击文件 -> 另存为。将类型从 Unicode(或其他)更改为 ANSI,然后保存。

【讨论】:

【参考方案4】:

几个建议

试试调用操作符:

&sqlplus system/passwd@mydb @my_sql

尝试启动进程:

start-process -NoNewWindow -FilePath sqlplus -ArgumentList @"
system/passwd@mydb @my_sql
"@

【讨论】:

更新:我尝试了两种建议的方法,但仍然出现错误。有趣的是,我在从批处理脚本运行时看到了同样的问题。【参考方案5】:

我遇到了典型的问题。消息是: 未知命令“and” - 忽略行的其余部分。 原因是代码中有一个空字符串。 例如 选择 ... 从 ... 在哪里 ... [空字符串] 并且...

【讨论】:

【参考方案6】:

如下使用

sqlplus -s system/passwd@mydb  "@my_sql";

【讨论】:

以上是关于powershell/sqlplus 错误 SP2-0042:未知命令“■@” - 忽略行的其余部分的主要内容,如果未能解决你的问题,请参考以下文章

插入时出现 Oracle 错误 SP2-0734

SP2-0552:未声明绑定变量“NEW”并且 END 错误报告 - 未知命令

windows server 2003在升级到SP2后补齐补丁开机错误提示

如何使用 CONCAT 解决 SQL Plus 中的 SP2-0734?

为啥sqlplus / as sysdba登陆oracle时报一串SP2-0734的错误,SP2-0734: unknown command beginning "

SP2-0734:未知命令开始选择