使用SQL工具,我想创建一个具有VARCHAR记录的文本文件。
使用SQL Developer我通过调用脚本成功创建了输出文本文件。但根据我的研究,SQL Developer目前不支持TRIMSPOOl命令,使我的输出具有尾随空格。
以下是脚本中的代码:
spool on set echo off set verify off set feedback off set heading off set trimspool on set termout off spool C:\SQLFiles\Output.txt; select cust_name || cust_addr as Cust_Details from customer_db; spool off;
我现在有SQL Plus 11g,我正在尝试运行我在SQL Developer中创建的脚本。我收到SP2-0606错误,说:
SP2-0606: Cannot create SPOOL file "on.LST:
根据我所做的研究,这是因为Spool命令,我没有权限访问默认文件夹?? ..
您可以帮助我做一些我应该更改的设置,以便在SQL Plus中获得所需的结果。
答案 0 :(得分:5)
你必须把文件名放在双引号中 - 我猜SQLPlus使用C风格的转义序列,给反斜杠\
一个特殊的含义。此外,您应该删除分号';':
所以如果你替换
spool C:\SQLFiles\Output.txt;
带
spool "C:\SQLFiles\Output.txt"
它应该按预期工作(如果C:\ SQLFiles存在并且可以为您的帐户写入)。
更新
正如@LalitKumarB所指出的那样,假脱机工作完全正常,没有双引号。真正的问题在于其他地方:
spool on
这告诉SQLPlus在当前目录中创建输出文件on
。因此,如果您无权访问从SQLPlus启动的目录,则会收到此错误消息。
答案 1 :(得分:1)
来自文档,
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;
假脱机文件如下:
所以它没有任何双引号。我想你需要真正看看你用来假脱机的目录。
答案 2 :(得分:1)
由于权限问题,您收到此错误。以管理员模式打开命令提示符窗口或将文件保存到不需要管理员权限的位置。
答案 3 :(得分:0)
此错误仅是由于在创建假脱机文件的位置没有"WRITE" privileges on directory
。
解决方案
如果该目录的所有者不是您使用 chmod 拥有,则向该目录的所有者授予或要求授予许可。获得所有chmod 777 <file/directory name>
答案 4 :(得分:-1)
当您收到此错误时,请检查空格。例如,下面你会看到两个单引号(&#39;),但第一个在它后面有一个空格而第二个没有。
SP2-0606: Cannot create SPOOL file ' E:\SQL CLASS\New folder\sql class prt'
SQL> spool 'E:\SQL CLASS\New folder\sql class prt'