首页 文章

oracle sqlplus在@命令路径中有空格的问题

提问于
浏览
8

我在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 回答

  • 1

    如果你在linux下使用它,你可以使用''字符来逃避空间,例如:

    sqlplus [uname]/[pw] @../database/My\ Schema/create_sequence.sql
    
  • 0

    我知道这是一个老问题但是我遇到了同样的情况,经过多次尝试后我才开始工作,我希望分享我的解决方案,只需将路径放入这样的引号中:

    @“C:/ Users / john / AppData / Roaming / SQL Developer / test.sql”;

  • 1

    我连接到我的一个Linux盒子,很容易重现这个问题 . 似乎没有任何方法可以找到从命令行使用'@'选项执行文件,所以我认为你留下了以下选项来解决:

    • 将My Schema目录重命名为不再有空格(以及更新引用它的所有其他脚本)

    • 从它所在的目录中执行文件(我确认这有效,见下文)

    • 通过stdin将文件发送到sqlplus(见下文)

    您还应该向Oracle提供报告,因为可能会提供一个简单的修复程序 .

    示例命令:

    来自目录

    cd ../database/My\ Schema
    sqlplus [uname]/[pw] @create_sequence.sql
    

    通过stdin

    sqlplus [uname]/[pw] < ../database/My\ Schema/create_sequence.sql
    
  • 0

    好吧,如果这是一个Linux问题(请参阅我对您的问题的评论 - 它在Solaris上运行正常),您可能需要尝试以下方面:

    sqlplus [uname]/[pw] < '../database/My Schema/create_sequence.sql'
    

    如果您尝试将参数传递给sql脚本,则会遇到问题,但是......

    编辑:似乎有一个非常类似的问题引发Metalink问题:“错误7150873 SQL脚本与文件名包含空格导致SP2-0556” . 它被列为影响10.2.0.4和11.1 . 据推测它固定在10.2.0.5和11.2中,两者都没有 . 它确实说这是一个影响大多数/所有平台的通用问题,所以我不知道这是不是你的问题 .

    问题的具体文本:“SQLPLUS START命令无法执行文件名中有空格的SQL脚本 . ”

    只是为了笑容,如果您执行以下操作会发生什么:

    sqlplus [uname]/[pw]
    start '../database/My Schema/create_sequence.sql'
    

    编辑2:我不知道修改你的脚本是否可行,但解决方法可能是:

    cp '../database/My Schema/file2run.sql' ./temp.sql
    sqlplus [uname]/[pw] @temp.sql
    rm ./temp.sql
    

    您需要以这种方式包装每个sqlplus调用 . 另一个选择是创建一个shell脚本,比如名称为mysqlplus.sh:

    #!/bin/sh
    cp $2 ./temp$$
    sqlplus $1 @$2
    rm ./temp$$
    

    然后修改您的构建脚本:

    mysqlplus.sh [uname]/[pw] '../database/My Schema/create_sequence.sql'
    
  • 3

    根据OTN站点上的this thread,SP2-0556可能是由正在执行的文件中的无效空格字符引起的 . 可能Linux版的SQL-Plus不知道如何处理Windows换行符 . 尝试删除现有文件并使用所需命令重新创建它(您说只有2个DDL命令,因此应该很容易) .

  • 0

    如果你在路径周围加上引号,它会起作用:

    SQL > START "C:\Documents and Settings\Administrator\demobuild.sql"
    

    这确实是 not 工作:

    SQL > START C:\Documents and Settings\Administrator\demobuild.sql
    
  • 5

    你试过逃离白色空间吗?

    尝试:

    sqlplus [uname]/[pw] @'../database/My\ Schema/create_sequence.sql'
    

相关问题