SAP R/3中数据库表列的默认值



在我的SAP应用程序的上下文中,我向一个现有的表添加了一个列,并希望为它定义一个默认值,这样处理表的旧代码(特别是插入行的代码)就不必关心新列了——相反,我希望它被一个预定义的默认值自动填充(当然,只有在没有指定值的情况下)。

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

作为我们公司的SAP专家不知道这是否可能,我想也许这里有人会。那么,这可能吗?如果可能,又是怎么做到的?

Edit - Requested Scenario details:这个场景实际上非常简单:我们的应用程序有一个用户表,其中包含标准的用户内容(名称、一些设置、id、划分、一堆标志等等),我添加了一个列来存储一个简单的设置(用户为其web界面选择的设计)。它只包含一个名称(char 40)。这就是我上面谈到的列,我想让它的默认值为我们设为"default Design"

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

如果可能的话,我建议选择您的域值,以一种中立字段值(空格,零,无论什么)对应于您的默认值的方式。如果不可能,请详细描述您的场景以获得更具体的答案。


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

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

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

相关内容

  • 没有找到相关文章

最新更新