我在Linux上运行Oracle 11g,我正在尝试运行一个脚本来创建我的数据库 . 这个脚本在Windows上运行正常,但是当我在Linux上测试它时,我收到以下错误:
SP2-0556: Invalid File Name
问题可能是文件名的路径中有空格 . 我将把问题简化为我在文件中运行的众多命令之一,以简化操作 . 我试图运行的示例命令如下所示:
sqlplus [uname]/[pw] @'../database/My Schema/create_sequence.sql'
create_sequence.sql文件有两个简单的创建序列命令,它们可以自行运行 . 我强烈怀疑这是由于空白,因为当我将目录名从My Schema更改为MySchema并相应地更改上面的sqlplus命令时,脚本运行正常 .
就像我说的,这个脚本在带有空格的窗口中工作,但不适用于Linux . 我怀疑空间可能不受支持,但我想知道是否有人知道有什么不同或者它有解决方法吗?
旁注:运行如下命令:
more ../database/My\ Schema/create_sequence.sql
要么
more "../database/My Schema/create_sequence.sql"
如您所料,将文件的内容打印到控制台 . 所以,我认为这是sqlplus(和linux)具体的 .
7 回答
如果你在linux下使用它,你可以使用''字符来逃避空间,例如:
我知道这是一个老问题但是我遇到了同样的情况,经过多次尝试后我才开始工作,我希望分享我的解决方案,只需将路径放入这样的引号中:
@“C:/ Users / john / AppData / Roaming / SQL Developer / test.sql”;
我连接到我的一个Linux盒子,很容易重现这个问题 . 似乎没有任何方法可以找到从命令行使用'@'选项执行文件,所以我认为你留下了以下选项来解决:
将My Schema目录重命名为不再有空格(以及更新引用它的所有其他脚本)
从它所在的目录中执行文件(我确认这有效,见下文)
通过stdin将文件发送到sqlplus(见下文)
您还应该向Oracle提供报告,因为可能会提供一个简单的修复程序 .
示例命令:
来自目录
通过stdin
好吧,如果这是一个Linux问题(请参阅我对您的问题的评论 - 它在Solaris上运行正常),您可能需要尝试以下方面:
如果您尝试将参数传递给sql脚本,则会遇到问题,但是......
编辑:似乎有一个非常类似的问题引发Metalink问题:“错误7150873 SQL脚本与文件名包含空格导致SP2-0556” . 它被列为影响10.2.0.4和11.1 . 据推测它固定在10.2.0.5和11.2中,两者都没有 . 它确实说这是一个影响大多数/所有平台的通用问题,所以我不知道这是不是你的问题 .
问题的具体文本:“SQLPLUS START命令无法执行文件名中有空格的SQL脚本 . ”
只是为了笑容,如果您执行以下操作会发生什么:
编辑2:我不知道修改你的脚本是否可行,但解决方法可能是:
您需要以这种方式包装每个sqlplus调用 . 另一个选择是创建一个shell脚本,比如名称为mysqlplus.sh:
然后修改您的构建脚本:
根据OTN站点上的this thread,SP2-0556可能是由正在执行的文件中的无效空格字符引起的 . 可能Linux版的SQL-Plus不知道如何处理Windows换行符 . 尝试删除现有文件并使用所需命令重新创建它(您说只有2个DDL命令,因此应该很容易) .
如果你在路径周围加上引号,它会起作用:
这确实是 not 工作:
你试过逃离白色空间吗?
尝试: