SQL * PLUS-假脱机时创建一个新文件夹

问题描述 投票:0回答:1

我有这些动态脚本。第一个将表的DDL存储在文件中,文件中包含当前正在假脱机的表的名称,该文件位于指定文件夹中:

set pagesize 0
set linesize 100
set long 90000

SET TERMOUT OFF
spool out.sql

select 'spool C:\Users\personal\MAIN_USR\table\'||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)||
       'UPDATE MTTO_TAB_EXISTE_ALL'||chr(13)||chr(10)||
       'SET MCA_BACKUP_DDL = ''S'''||chr(13)||chr(10)||
       'WHERE table_name = '''||table_name||''';'||chr(13)||chr(10)||
       'COMMIT;'||chr(13)||chr(10)||
       'spool off' as cmd
FROM MTTO_TAB_EXIST_ALL tea
WHERE tea.MRK_DEL_PERM = 'Y'
AND tea.OWNER_NM = 'MTO_TABL'
AND MCA_BACKUP_DDL != 'Y';

spool off

@OUT.SQL

exit

此存储库与上面的脚本具有相同的功能,但具有索引:

set pagesize 0
set linesize 100
set long 90000

SET TERMOUT OFF
spool outidx.sql

select 'spool C:\Users\personal\MAIN_USR\index\'||REPLACE(index_name, '$', '_')||'.txt'||chr(13)||chr(10)||
       'SELECT DBMS_METADATA.GET_DDL'||chr(13)||chr(10)||
       '(''INDEX'','''||index_name||''',''MTO_TABL'') '||chr(13)||chr(10)||
       'FROM DUAL;'||chr(13)||chr(10)||
       'spool off' as cmd
FROM user_indexes ui
INNER JOIN MTTO_TAB_EXIST_ALL tea USING(table_name)
WHERE tea.MRK_DEL_PERM = 'Y'
AND tea.OWNER_NM = 'MTO_TABL'
AND MCA_BACKUP_DDL != 'Y';

spool off

@OUTIDX.SQL

exit

我想做的是,创建一个动态文件夹,其中包含要假脱机的表的名称,并将该表及其索引的DDL存储在该文件夹中。像这样的东西

set pagesize 0
set linesize 100
set long 90000

SET TERMOUT OFF
spool out.sql

select 'C:\Users\personal\test\'||REPLACE(table_name, '$', '_')||'\'||REPLACE(table_name, '$', '_')||'.txt'||chr(13)||chr(10)||

上面的脚本运行没有问题,但是它没有创建新文件夹,因为Spool仅存储查询结果。这是我想要做什么的一种想法。

oracle plsql sqlplus spool command-window
1个回答
2
投票

您可以使用HOST命令。它调出操作系统。 Windows示例:

SQL>  HOST "md mydirectory"
© www.soinside.com 2019 - 2024. All rights reserved.