SAP中列的数据库表缺省值

时间:2013-04-26 14:25:41

标签: sap

在我的SAP应用程序的上下文中,我向现有表添加了一个列,并希望为其定义一个默认值,以便使用该表的旧代码(特别是插入行的代码)不必关心新列 - 而不是我希望它自动填充预定义的默认值(仅当没有指定值时)。

后面的数据库系统是Oracle-DB,但我只能通过SAP-GUI和ABAP-SQL访问它。

由于我们SAP的公司专家不知道这是否可行,我想也许有人会在这里。所以 - 这是可能的,如果是 - 怎么样?

编辑 - 请求的方案详细信息: 场景实际上非常简单:我们的应用程序的用户表包含标准用户资料(名称,一些设置,ID,分区,一堆标志等),我添加了一个列来存储简单的设置(用户为其网络界面选择的设计)。它只包含一个名称(char 40)。这是我上面谈到的专栏,我希望它的默认值是“默认设计”。

2 个答案:

答案 0 :(得分:2)

请不要考虑在数据库级别上执行此操作。认真。直接对数据库层所做的更改将在系统内部不可见,并导致各种奇怪的副作用,这些副作用将成为支持的噩梦。此外,更改和传输系统不会接收您的更改 - 您必须手动更新QA和生产系统。

如果可能,我建议您选择域值,使中性字段值(空格,零,等等)与默认值相对应。如果无法做到这一点,请详细描述您的方案以获得更具体的答案。


SAP R / 3 / ABAP环境不提供为列添加默认值的选项。在添加列时,您只能选择强制系统填充非NULL默认值,但这通常是个坏主意。修改所有数据并插入默认值需要花费时间,并且根据表的大小和关键性,这可能导致生产中断。使用默认值填充字段必须由应用程序服务器执行,而不是数据库。在您的情况下,我只是在读访问模块中添加逻辑,如

IF my_user-ze_design IS INITIAL.
  my_user-ze_design = co_ze_default_design.
ENDIF.

答案 1 :(得分:0)

您可以为添加到表中的列定义默认值 - 如果您的数据库是Oracle 11g(或更高版本),Oracle引入了"仅限字典添加列",这意味着默认值元数据仅存储在字典 - 所以不需要使用默认值更新现有记录,无论表格有多大,都没有开销。