SQL*PLUS - SET LINESIZE 在后台处理时对我的脚本没有任何影响

SQL*PLUS - SET LINESIZE doesn't have any effect in my script while it's spooling

我正在使用 PL/SQL 开发者版本 11.0.6.1776

以下脚本在指定路径上创建一个名为 'test' 的文件夹,并在其中创建一个子文件夹,名称为 table 当前正在假脱机以将其元数据存储在该文件夹中:

set pagesize 0
set long 90000
set linesize 10000

SET TERMOUT OFF
spool out.sql

select 'host mkdir ''C:\Users\personal\test'''||';'||chr(13)||chr(10)|| --Creating the new folder
       'host mkdir '||''''||'C:\Users\afpuchn\test\'||REPLACE(table_name, '$', '_')||''''||';'||chr(13)||chr(10)|| --Creating a subfolder
       'spool C:\Users\personal\test\'||REPLACE(table_name, '$', '_')||'\'||REPLACE(table_name, '$', '_')||'.txt'||chr(13)||chr(10)||
       'SELECT DBMS_METADATA.GET_DDL'||chr(13)||chr(10)||
       '(''TABLE'','''||table_name||''',''MTO_TABL'') '||chr(13)||chr(10)||
       'FROM DUAL;'||chr(13)||chr(10)|| --Extracting metadata
       'spool off' as cmd
FROM MTTO_TAB_EXIST_ALL tea
WHERE tea.MRK_DEL_PERM = 'Y'
AND tea.OWNER_NAME = 'MTO_TABL'
AND ROWNUM < = 5;

spool off

@OUT.SQL

exit

每当我 运行 脚本时,我想为存储在创建的文件夹中的文件指定的名称不完整或指定的文件类型不完整。

这是 returns:

的脚本示例
host mkdir 'C:\Users\personal\test';
host mkdir 'C:\Users\personal\test\ED_EXTR_CSV_PRIM_DEA_PUBLI';
spool C:\Users\afpuchn\test\ED_EXTR_CSV_PRIM_DEA_PUBLI\ED_EXTR_CSV_PRIM_DEA_PU --The file name is incomplete
SELECT DBMS_METADATA.GET_DDL
('TABLE','ED_EXTR_CSV_PRIM_DEA_PUBLI','MTO_TABL')
FROM DUAL;
spool off

因此,即使我放了一个不起作用的SET LINESIZE,脚本也无法存储在给定的路径中。我的PL/SQL版本和这个有关系吗?

根据手册,

set linesize 不受 PL/SQL 开发人员命令 window 支持。如果你想创建 运行 SQL*Plus 脚本,我强烈建议你从命令行使用实际的 SQL*Plus,而不是模仿。

我非常喜欢使用 PL/SQL Developer 来编写程序和工作表,但它不是编写脚本的好环境。 SQL*Plus 也不是,但 SQL*Plus 至少在各种平台上简单且兼容,这就是为什么许多 DBA 使用该工具来 运行 脚本。