SQL * PLUS — создать новую папку во время буферизации

У меня есть эти динамические сценарии. Первый хранит 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 сохраняет только результаты запроса. Это своего рода представление о том, что я хочу сделать.


person tefached616    schedule 31.03.2020    source источник


Ответы (1)


вы можете использовать команду HOST для этого . Он обращается к операционной системе. пример для окон:

SQL>  HOST "md mydirectory"
person OldProgrammer    schedule 31.03.2020
comment
Вы знаете, как создать подпапку с помощью хоста? Я пытаюсь сделать это, но это не работает: HOST mkdir 'C:\Users\personal\test\another_test'; test и other_test — новые - person tefached616; 01.04.2020
comment
вы не можете сделать это в окнах. вам нужно создать каждую папку по отдельности, перейти в эту папку и создать следующую и т. д. - person OldProgrammer; 01.04.2020