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

blpfk2vs  于 2023-04-21  发布在  Shell
关注(0)|答案(7)|浏览(423)

我在powershell中运行这个命令:

sqlplus system/passwd@mydb  @my_sql

我已经尝试过它与不带反引号和各种其他版本,我发现通过谷歌.我一直得到一个错误时,命令传递给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++看起来像“¦@”

syqv5f0l

syqv5f0l1#

如果你在powershell中使用重定向(〉或〉〉)创建了你的SQL命令文件:

myProgram〉mySQL.out

然后像这样运行:

&sqlplus mypw/myuser@mydb.xyz.com“@mySQL.out”

PowerShell可能以UTF-16格式保存了输出文件,这是Sqlplus不喜欢的。(您可以手动创建完全相同的文件,然后比较它来确认-字节计数将关闭,并且在KDiff中您将得到消息,大意是文本相等,但文件不等于二进制)。
要修复-您需要做两件事::
1.在SQL命令的顶部添加一些空行- Powershell仍然会在那里写入BOM(字节顺序标记),并且看起来很难避免它-但sqlplus将只是通过它,尽管会给出错误-但会继续执行代码的其余部分。
1.然后在创建文件之前在powershell中运行以下命令:$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
参见Changing PowerShell's default output encoding to UTF-8
我收到了这个错误:
SP2-0042:未知命令“■S”-忽略其余行。
这解决了这个问题-或者至少我能够运行它。你也可以使用Notepad++从一个窗口剪切并通过它到另一个窗口,这将解决BOM和编码问题。

gr8qqesn

gr8qqesn2#

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

wfveoks0

wfveoks03#

我也遇到了同样的问题。我的问题是因为脚本文件保存为unicode。我不知道这是否对你有帮助,但下面是我如何修复的:
用记事本编辑脚本。点击File -〉保存As。将类型从Unicode(或其他)更改为ANSI,然后保存。

ki0zmccv

ki0zmccv4#

几个建议
尝试调用操作符:

&sqlplus system/passwd@mydb @my_sql

试试start-process:

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

58wvjzkj5#

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

zpgglvta

zpgglvta6#

使用如下

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

ss2ws0br7#

上下文

FWIW:我的sqlplus客户端(12.2.0.1.0)在提供的sql脚本中遇到行首'#'字符时触发了错误。

补救措施

添加一个空格作为违规行的第一个字符。如果数据是plsql代码或sql语句的一部分,即在跨越多行的字符串文字中,使用UNISTR(.)函数 Package 文字,并通过\0023(其utf8十六进制代码)引用交叉阴影线(如果db字符集和国家字符集是al32utf8),或者从与||chr(35)||链接的部分字符串组成它。

备注

sqlplus可能有一个设置来改变观察到的行为,我没有探索过这个路线。

相关问题