无DDS物理文件源修改及跨库字段同步(无编译无数据丢失)咨询
1. 如何修改无DDS的物理文件的源?
首先得明确:无DDS的物理文件大多是用SQL CREATE TABLE创建的,或是创建后没保留源文件。要修改它的源,核心是先把现有文件的结构提取出来生成源,改完再同步回去:
提取现有结构生成源
如果你习惯用SQL,直接跑这条语句就能导出目标文件的DDL定义,把结果复制到源文件里即可:SELECT DB2_COLUMNS.DDL FROM QSYS2.DB2_COLUMNS WHERE TABLE_SCHEMA = '你的库名' AND TABLE_NAME = '你的文件名';要是偏好CL命令,用
DSPFFD把字段信息导出到临时文件,再查询这个文件整理成DDS或SQL源:DSPFFD FILE(LIB/FILE) OUTPUT(*OUTFILE) OUTFILE(TEMP/TMPFFD)查询
TEMP/TMPFFD就能拿到所有字段名、类型、长度等信息,照着写源就行。修改源文件
不管是SQL DDL还是DDS源,按需求调整字段——比如新增字段、修改类型等,注意语法合规。应用修改到物理文件
要是用的DDS源,用CHGPF命令更新,一定要加DATA(*KEEP)保住数据:CHGPF FILE(LIB/FILE) SRCFILE(SOURCE_LIB/SRCFILE) SRCMBR(MEMBER) DATA(*KEEP)要是用SQL,直接运行修改后的
ALTER TABLE语句即可,比如新增字段的语句本身就不会丢失数据。
2. 同步lib2修改后的源到lib1的无DDS物理文件(无需编译、不丢失数据)
这里不用重新编译,直接用修改后的源更新现有文件就行,核心是用对命令/语句:
先确认lib2里的源(DDS或SQL脚本)已经修改完成。
如果是DDS源:用
CHGPF直接指向lib2的源文件,指定lib1的目标文件,加上DATA(*KEEP)确保数据丝毫不丢:CHGPF FILE(LIB1/TARGET_FILE) SRCFILE(LIB2/SRC_FILE) SRCMBR(SRC_MEMBER) DATA(*KEEP)这个命令是增量更新结构,不是全量重建,速度快还安全。
如果是SQL源:直接在SQL环境中针对lib1的文件运行修改后的语句,比如新增字段:
ALTER TABLE LIB1.TARGET_FILE ADD COLUMN NEW_FIELD VARCHAR(50) DEFAULT '' NOT NULL;这种方式本身就是直接修改现有表结构,完全不用编译,数据也不会丢失。
保险起见,同步前可以给lib1的文件做个备份:
SAVOBJ OBJ(TARGET_FILE) LIB(LIB1) DEV(*SAVF) SAVF(TEMP/BACKUP_FILE)
内容的提问来源于stack exchange,提问作者user6200118
相关产品推荐
相关产品推荐

