删除列的正确方法

2020-09-13 18:59发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)推荐的删除不需要的列的方法是什么...

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

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


推荐的删除不需要的列的方法是什么-

当项目开始时,我们扩展了OOTB类型以容纳一些新属性。 现在,我们已经收到了新的要求/变更单,这将需要更改我们的扩展类型-不再需要这些属性。

有问题的每一列都引用了将要删除的自定义类型。

删除这些值不会影响当前生产中的任何现有记录。

7条回答
奄奄一息的小鱼
2020-09-13 19:16 .采纳回答

尽管这可能不是删除不需要的列的"正确"方法,但如果您需要删除数百个列,这可能会有所帮助:我们构建了一个更新任务(可以从hac更新页面运行),该任务生成一个sql脚本,该脚本将:

  • 删除已部署的类型系统中未引用的任何属性的属性定义

  • 删除引用的列

您可以从下面下载源代码。 将其放在扩展名src文件夹中,并通过添加有效的扩展名来修复@SystemSetup批注。 如果您不使用注释来配置Spring Bean,则必须添加对Spring xml配置的引用。 构建完成后,您将在扩展程序中找到一个可配置的任务:

替代文本


激活此任务不会对您的数据库运行任何操作,但会生成一个您可以测试和查看的sql脚本(该脚本将直接写入标准日志中)。 在下面,您可以找到为单个不需要的字段生成的示例脚本:

 -表:泛型项目
  从ITEMPK IN的道具中删除(从属性描述符中选择PK,其中Lower(columnName)='p_orderminimun'和EnclosingTypePK in(从包含类型的PK中选择,其中itemtypecode在(从ydeployments中选择类型代码,其中wheretable(tablename)='genericitems'))和PersistenceTypePK IS  NOT NULL);
  从功能区中删除ItemPK IN(从属性描述符中选择PK,其中Lower(columnName)='p_orderminimun',并从EnclosingTypePK中删除(从组成类型中选择PK,其中itemtypecode in(从ydeployments中选择类型代码,其中wheretable(tablename)='genericitems'))和PersistenceTypePK IS  NOT NULL);
  从属性描述符中删除(在ITEMPK IN中进行选择(从属性描述符中选择PK在其中下(columnName)='p_orderminimun')和EnclosingTypePK在(从组成类型中选择PK,其中itemtypecode在(从ydeployments中选择类型代码,其中(表名)='genericitems'))和PersistenceTypePK  NOT NULL);
  从属性描述符DELETE FROM WHERE lower(columnName)='p_orderminimun'和EnclosingTypePK in(从compositiontypes中选择PK,其中itemtypecode in(从ydeployments WHERE lower(tablename)='genericitems'中选择类型代码))和PersistenceTypePK IS NOT NULL;
 
  ALTER TABLE泛型项目DROP COLUMN p_orderminimun;

  

检查脚本,并小心应用它。 在运行它之前,您需要在hac维护部分中运行"清理类型系统"。 跑步时关闭杂物。

要删除的列的检测方式应该非常"安全",因为脚本实际上会计算完整的hybris模式并将其与现有模式进行比较。 但是,用于从类型配置中删除属性的脚本是通过跟踪从hmc生成的查询而构建的,可能不涉及任何用例。 如果只需要删除一些属性,则可能需要从hmc中手动删除属性。

我们成功使用此脚本在基于hybris 5.1的项目中删除了250多个未引用的列。 但是请小心,此脚本将删除列并以不受支持的方式修改hybris类型配置,并且可能会破坏您的数据。 在生产系统上运行之前,请进行备份并仔细测试


您可以在此处下载源代码:

http://goo.gl/Lp123x


HTH,fabrizio

一周热门 更多>

相关问答