我使用 SQL ALTER TABLE 语句向 DB2/400 v6r1 中的表(物理文件)添加了新列。我有一个基于该表的逻辑文件,并且新字段没有出现在其中。有没有办法更新该逻辑文件而不删除并重新创建它?
最佳答案
没有。
您将需要重新编译逻辑。
如果该字段被添加到记录的末尾,您可能可以通过关闭其级别检查来逃脱,LVLCHK(*NO)
。如果某些程序仅将其用于输入并且不需要新字段,这可能会让您不必重新编译它们。这个选择让许多从业者感到相当紧张,其他人则认为这很好。小心使用。仅通过 SQL 访问文件的程序可能会被豁免。所有其他使用 native I/O 的逻辑或物理的程序都必须重新编译。
在程序中仅使用 SQL 的一个好处是需要更少的重新编译。
编辑
需要明确的是 -
您需要重新编译引用已更改物理的所有逻辑。
您需要重新编译任何使用 native I/O 来写入或更新物理或任何逻辑中的记录的程序。
许多(可能是大多数)会告诉您还要重新编译仅读取文件(PF 或 LF)的程序。
有些人会告诉您,如果您仅将新字段添加到记录格式的末尾,那么您可能不需要重新编译仅使用 native I/O 来读取文件的程序。如果这样做,您将需要 a) 仅在调用这些程序时使用 OVRDBF LVLCHK(*NO),然后使用 DLTOVR,或者 b) 创建或更改文件以具有 LVLCHK(*NO)。
两者都有风险。警告:这些特技是由专业人士表演的。不要在家尝试。
换句话说,如果您的商店没有足够的经验来仔细、彻底地理解和妥善处理问题,那么就谨慎行事吧。确实。如果您不得不问这个问题,那么您还没有达到目的。
如果您在记录布局的开头或中间添加了新字段,或者更改了任何现有字段的大小或类型,请不要通过 GO!您将需要重新编译所有使用该文件的程序。
关于ibm-midrange - 使用 SQL 添加列后如何更新逻辑文件定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17575858/