SQL*PLUS - 在假脱机时创建一个新文件夹
SQL*PLUS - Create a new folder while spooling
我有这些动态脚本。第一个将 table 的 DDL 存储在一个名为 table 的文件中,该文件当前正在假脱机,位于指定文件夹内:
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
我想做的是创建一个动态文件夹,其名称为正在假脱机的 table,并将 table 的 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
只存储查询结果。这是我想做的事情的一种想法。
您可以为此使用 HOST 命令。它调用操作系统。 windows 的示例:
SQL> HOST "md mydirectory"
我有这些动态脚本。第一个将 table 的 DDL 存储在一个名为 table 的文件中,该文件当前正在假脱机,位于指定文件夹内:
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
我想做的是创建一个动态文件夹,其名称为正在假脱机的 table,并将 table 的 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
只存储查询结果。这是我想做的事情的一种想法。
您可以为此使用 HOST 命令。它调用操作系统。 windows 的示例:
SQL> HOST "md mydirectory"