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:未知命令“■@” - 忽略行的其余部分的主要内容,如果未能解决你的问题,请参考以下文章
SP2-0552:未声明绑定变量“NEW”并且 END 错误报告 - 未知命令
windows server 2003在升级到SP2后补齐补丁开机错误提示
如何使用 CONCAT 解决 SQL Plus 中的 SP2-0734?
为啥sqlplus / as sysdba登陆oracle时报一串SP2-0734的错误,SP2-0734: unknown command beginning "