I added a new column to a table (physical file) in DB2/400 v6r1 using an SQL ALTER TABLE statement. I have a logical file based on that table and the new field doesn't appear in it. Is there a way update that logical file without deleting and recreating it?
2 回答
不。
您将需要重新编译逻辑。
如果在记录末尾添加了该字段,您可能可以通过关闭它的级别检查来逃脱,LVLCHK(*NO)
. 如果它们仅将其用于输入并且不需要新字段,则这可能使您无需重新编译某些程序就可以逃脱。这个选项让许多从业者相当紧张,其他人认为这很好。小心使用。仅通过 SQL 访问文件的程序可能会被豁免。所有其他使用带有本机 I/O 的逻辑或物理的程序都必须重新编译。
在您的程序中仅使用 SQL 的一个好处是需要更少的重新编译。
编辑
要清楚 -
您需要重新编译所有引用已更改物理的逻辑。
您需要重新编译任何使用本机 I/O 的程序来写入或更新物理或任何逻辑中的记录。
许多(可能是大多数)会告诉您也重新编译只读取文件(PF 或 LF)的程序。
有些人会告诉您,如果您只在记录格式的末尾添加新字段,那么您可能不需要重新编译仅使用本机 I/O 来读取文件的程序。如果您这样做,您将希望 a) 仅在要调用这些程序时使用 OVRDBF LVLCHK(*NO),然后使用 DLTOVR,或者 b) 创建或更改文件以具有 LVLCHK(*NO)。
两者都有风险。警告: 这些特技是由专业人士完成的。不要在家里尝试。
换句话说,如果您的商店没有足够的经验来理解和妥善处理问题,那么请谨慎行事。确实。如果你不得不问这个问题,那么你还没有接近那里。
如果您在记录布局的开头或中间添加了新字段,或者您更改了任何现有字段的大小或类型,请不要通过!您将需要重新编译所有使用该文件的程序。
重新编译 LF(假设它是使用 DDS 创建的)或执行 ALTER VIEW 以在 SQL 中更新它。