【问题标题】:SQL Plus SP2-0606SQL Plus SP2-0606
【发布时间】:2015-05-22 10:00:42
【问题描述】:

使用 SQL 工具,我想创建一个包含 VARCHAR 记录的文本文件。

使用 SQL Developer 我已经通过调用脚本成功地创建了输出文本文件。但根据我的研究,SQL Developer 目前不支持 TRIMSPOOl 命令,导致我的输出有尾随空格。

这是脚本中的代码:

假脱机 关闭回声 设置验证关闭 关闭反馈 出发 设置修剪阀 关闭期限 假脱机 C:\SQLFiles\Output.txt; 选择客户名称 || cust_addr 作为 Cust_Details 来自客户数据库; 脱线;

我现在有 SQL Plus 11g,我正在尝试运行我在 SQL Developer 中创建的脚本。我收到一个 SP2-0606 错误,说:

SP2-0606:无法创建 SPOOL 文件“on.LST:

根据我所做的研究,是因为Spool命令,我没有权限访问默认文件夹??..

您能否帮忙说明我应该更改哪些设置才能在 SQL Plus 中获得所需的结果。

【问题讨论】:

  • 嗨,分享我所做的解决方案。我只是删除了 'spool on' 的行。

标签: sql oracle sqlplus


【解决方案1】:

你必须把文件名放在双引号中——我猜 SQLPlus 使用 C 风格的转义序列,给反斜杠 \ 一个特殊的含义。另外,您应该删除分号';':

所以如果你替换

spool C:\SQLFiles\Output.txt;

spool "C:\SQLFiles\Output.txt"

它应该按预期工作(如果 C:\SQLFiles 存在并且可写入您的帐户)。

更新

正如@LalitKumarB 所指出的,如果没有双引号,spool 工作得非常好。真正的问题在别处:

spool on

这告诉 SQLPlus 在当前目录中创建一个输出文件on。因此,如果您无权访问启动 SQLPlus 的目录,则会收到此错误消息。

【讨论】:

  • 我不这么认为。 SPOOL 可以在没有双引号的情况下按预期工作。我认为问题在于他正在使用的目录。
  • @LalitKumarB:准点! sqlplus 必须从当前用户有权创建文件的文件夹启动。
【解决方案2】:

由于权限问题,您收到此错误。以管理员模式打开命令提示符窗口或将文件保存到不需要管理员权限的位置。

【讨论】:

    【解决方案3】:

    来自文档,

    SP2-0606 无法创建文件 file_name

    原因:STORE 命令无法创建指定的文件。可能是磁盘空间不足,打开的文件太多,或者 输出目录的只读保护。

    操作:检查是否有足够的磁盘空间以及目录上的保护是否允许创建文件。

    我的测试用例显示 spool 命令没有任何问题。我认为根本不需要引号。

    例如,

    客户:12c

    操作系统:Windows 7

    SQL> spool D:\text.txt
    SQL> select ename||to_char(empno) from emp;
    
    ENAME||TO_CHAR(EMPNO)
    --------------------------------------------------
    SMITH7369
    ALLEN7499
    WARD7521
    JONES7566
    MARTIN7654
    BLAKE7698
    CLARK7782
    SCOTT7788
    KING7839
    TURNER7844
    ADAMS7876
    
    ENAME||TO_CHAR(EMPNO)
    --------------------------------------------------
    JAMES7900
    FORD7902
    MILLER7934
    
    14 rows selected.
    
    SQL> spool off;
    

    假脱机文件看起来像:

    所以它可以在没有任何双引号的情况下工作。我想您需要真正查看您用于假脱机的目录。

    【讨论】:

      【解决方案4】:

      这个错误只是因为,没有"WRITE" privileges on directory 在您创建假脱机文件的位置。

      解决方案
      使用 chmod 向您授予或请求授予该目录所有者的权限(如果该目录不属于您)。对所有chmod 777 <file/directory name>的前完全许可

      【讨论】:

        【解决方案5】:

        当您收到此错误时,请检查空格。例如,下面您会看到两个单引号 ('),但第一个引号后面有一个空格,而第二个没有。

        SP2-0606: Cannot create SPOOL file ' E:\SQL CLASS\New folder\sql class prt'
                                 SQL> spool 'E:\SQL CLASS\New folder\sql class prt'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多