1

我正在使用 PL/SQL Developer 版本 11.0.6.1776

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

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

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

以下是返回的脚本示例:

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 版本与此有什么关系吗?

4

1 回答 1

1

set linesize根据手册,PL/SQL Developer 命令窗口不支持。如果您想创建和运行 SQL*Plus 脚本,我强烈建议您从命令行使用实际的 SQL*Plus,而不是模仿。

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

于 2020-04-02T00:23:20.393 回答