2

我在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++ 中的“■@”看起来像“¦@”

4

6 回答 6

2

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


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

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

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

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

请参阅将 PowerShell 的默认输出编码更改为 UTF-8

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

于 2019-04-15T21:38:43.530 回答
1

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

于 2012-08-06T16:29:32.820 回答
1

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

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

于 2020-08-25T09:20:00.097 回答
0

我有典型的问题。消息是:未知命令“和” - 忽略行的其余部分。原因是代码中有一个空字符串。例如 select ... from ... where ... [empty string] and ... < 这是一条错误消息

于 2012-11-29T08:59:08.813 回答
0

几个建议

尝试调用运算符:

&sqlplus system/passwd@mydb @my_sql

尝试启动过程:

start-process -NoNewWindow -FilePath sqlplus -ArgumentList @"
system/passwd@mydb @my_sql
"@
于 2012-07-24T22:40:06.503 回答
0

使用如下

sqlplus -s system/passwd@mydb  "@my_sql";
于 2015-12-15T09:12:46.527 回答