PL/SQL - 在将元数据假脱机到文件后更新表

Posted

技术标签:

【中文标题】PL/SQL - 在将元数据假脱机到文件后更新表【英文标题】:PL/SQL - Update a table after spooling the metadata into a file 【发布时间】:2020-03-26 12:32:09 【问题描述】:

我有以下脚本,它存储MTTO_TAB_EXIST_ALL 列中的表的元数据。文件单独存储,文件名与当前spooling 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)||
       '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】:

当您动态创建所有内容时,请在此处添加 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) || ';'

【讨论】:

以上是关于PL/SQL - 在将元数据假脱机到文件后更新表的主要内容,如果未能解决你的问题,请参考以下文章

从 pl/sql 块内立即执行的数据假脱机

在没有假脱机或 utl_file 的 PL/SQL 中写入文件

Oracle PL/SQL 中的字符编码问题

假脱机多个文件

PL/SQL:将字符串的“数组”作为参数传递给 sql

如何从 PL/SQL 导出半百万条记录