PL / SQL - обновить таблицу после помещения метаданных в файл - PullRequest
0 голосов
/ 26 марта 2020

У меня есть следующий скрипт, который хранит метаданные для таблиц в столбце MTTO_TAB_EXIST_ALL. Файлы хранятся по отдельности, и их имя совпадает с текущей таблицей спулинга

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)||
       'spool off' as cmd
FROM MTTO_TAB_EXIST_ALL tea
WHERE tea.MRK_DEL_PERM = 'Y'
AND tea.OWNER_NM = 'MTO_TABL'
AND MRK_BACKUP_DDL != 'Y';

spool off

@OUT.SQL

. Что мне нужно, так это после спулинга этой таблицы, существующая запись в столбце MRK_BACKUP_DDL обновляется до «Y»

TABLE_NAME                    | MRK_BACKUP_DDL
— — — — — — — — — — — — — — — — — — — — — — — — — —
CA_3092_MVTO_NODISTR_2_MISC   | Y
ED_EXTR_CSV_PRIMA_DEA_PUBLI   | N
CA_T3054_GRP_OFICINAS_O_MISC0 | N

Я не смог найти ничего похожего на оператор UPDATE, поэтому я хотел бы знать, есть ли способ сделать это.

Я ценю любую помощь.

1 Ответ

1 голос
/ 26 марта 2020

Когда вы создаете все динамически, добавьте update между ними, здесь:

'FROM DUAL;'||chr(13)||chr(10)||
--> here
       'spool off' as cmd

«Здесь» будет выглядеть так; может быть, я потерпел неудачу с одинарными кавычками и прочим (у меня нет ваших таблиц и код, который вы написали, довольно трудно запутаться), поэтому - исправьте это, если необходимо.

'update MTTO_TAB_EXIST_ALL set mrk_backup_ddl = ''N'' where table_name = ' || 
chr(39) || MTO_TABL || chr(39) || ';'
...