删除列的正确方法

2020-09-13 18:59发布

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

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


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

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

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

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

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

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


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

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

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

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

付费偷看设置
发送
7条回答
奄奄一息的小鱼
1楼 · 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

奄奄一息的小鱼
2楼-- · 2020-09-13 19:19

您最终使用了什么选项? 我们在这里有相同的要求。

谢谢!

Haoba3210
3楼-- · 2020-09-13 19:08

您好,您可以通过执行以下步骤来删除列:
1)从扩展核心items.xml中删除属性,然后进行构建
2)转到HAC ,手动删除列(更改表table_name删除列column_name)
3)转到HMC,系统->类型->搜索类型->属性->删除不需要的属性/列
4) 转到HAC,通过选择"核心"和您的扩展核心进行平台更​​新

现在应该删除列

浮生未央
4楼-- · 2020-09-13 19:14

代替最后两个DELETE语句,一个语句可以执行一个impex:

 删除AttributeDescriptor; qualifier [unique = true]; enclosingType(code)[unique = true]
  ;  your_attribute_name;  your_item_with_removed_attribute
  
吹牛啤
5楼-- · 2020-09-13 19:21

已删除的类型可以通过HAC删除

https://wiki.hybris.com/display/release5/清理+类型+系统

这不会删除列。 但是,如果没有什么要引用这些列,那么如果您想保持架构干净,应该放心删除它们。

Nir深蓝
6楼-- · 2020-09-13 19:16

这不起作用,因为hybris不接受" alter table"命令。

土豆飞人
7楼-- · 2020-09-13 19:07

@Richard

我从-items.xml中删除了引用类型,然后从扩展类型中删除了属性。

Ran更新和引用类型已删除。

然后我进入HAC并在" SQL"选项卡中输入了ALTER命令,但收到一条错误消息,提示我输入了无效的DML或DQL语句。

一周热门 更多>

点击此处---> EasySAP.com 一起学习S4 HANA ...

相关问答