如何强制PowerDesigner使用ALTER TABLE命令将列从NULL更改为NOT NULL

2020-09-21 12:11发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 在将模型更改应用于数据库...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

在将模型更改应用于数据库时,我们正在挑战PowerDesigner 16.6 SP02的问题。 我们需要更改一列,以允许NULL值(尚不是必需的)来禁止它们(即,将该列设置为强制性)。 我们正在使用Oracle 11g DBMS,它对生成的SQL脚本进行了一些修改(围绕某些DDL操作的一些前置和后置操作)。

问题在于PD正在生成表重新创建,即使用tmp_前缀对其进行重命名,使用NOT NULL列创建一个新表,并将值从旧表插入新表中。 这是不受欢迎的行为,其原因有两个:

1)该表很大,要移动的数据很多(因此在软件升级过程中需要花费大量时间)。
2)无法使用我们的DBMS文件修改(在ORA11GR1下:: Script \ Objects \ Column \ ModifyColnNull),因为在生成的SQL中未使用此节点(将删除并重新创建表)。

我对此行为进行了一些调查。 从NOT NULL更改为允许NULL时,它将使用DBMS树中的节点(ModifyColnNull)(并生成SQL命令:ALTER TABLE表MODIFY列NULL)。 Oracle12c和SQL Server 2014 DBMS相同(我们使用的是Oracle和MS SQL Server安装)。 奇怪的是,在Postgre SQL 9.x DBMS中,即使从NOT NULL更改为NULL,它也不起作用。 因此看来,使用ALTER TABLE或表重新创建方式的决定在某种程度上受模型的DBMS文件的影响。 而且,当然,在"将模型更改应用于数据库"对话框中,我们选择了"尽可能使用alter语句"和"备份表"选项。

有人可以帮助我们吗?

3条回答
悻福寶寶
2020-09-21 12:34

您看到的行为是正确的。

原因是通过重新创建表并将数据复制到表中,我们保证不会发生数据丢失。

要获取ALTER TABLE语句,必须满足以下条件:

1)该列必须不是强制性的

2)该列必须位于 表格的开头或结尾。 列的顺序很重要。

一周热门 更多>