4

In the context of my SAP Application I added a column to an existing table and would like to define a default value for it, so that old code working with the table (code that is inserting lines especially) doesn't have to care about the new column - rather I want it to be filled with a predefined default value automatically (only if no value is specified of course).

The DB-system that lies behind is an Oracle-DB, though I have only access to it through the SAP-GUI and the ABAP-SQL.

As our company expert for SAP did not know if this is possible I thought maybe someone here would. So - is this possible and if it is - how?

Edit - Requested Scenario details: The scenario is actually very simple: We have a users-table for our application containing the standard user stuff (name, some setting, Ids, division, a bunch of flags and so on), and I added a column to store a simple setting (the design the user has chosen for his webinterface). It contains simply a name (char 40). That's the column I talked about above and I want the default value for it to be let's say "Default Design".

4

2 に答える 2

3

データベースレベルでこれを行うことについて考えないでください。真剣に。データベース層に直接加えられた変更は、システム内に表示されず、あらゆる種類の奇妙な副作用につながり、サポートするのは悪夢になります. さらに、変更は Change and Transport System によって取得されません。QA システムと Production システムを手動で更新する必要があります。

可能であれば、ニュートラル フィールド値 (スペース、ゼロなど) がデフォルト値に対応するようにドメイン値を選択することをお勧めします。これが不可能な場合は、シナリオを詳しく説明して、より具体的な回答を得てください。


SAP R/3 / ABAP 環境では、列のデフォルト値を追加するオプションはありません。列を追加するときにシステムにデフォルト以外の値を強制的に入力させることしか選択できませんがNULL、これは通常は悪い考えです。すべてのデータを変更してデフォルト値を挿入するには時間がかかり、テーブルのサイズと重要度によっては、運用が停止する可能性があります。フィールドへのデフォルト値の入力は、データベースではなく、アプリケーション サーバーで実行する必要があります。あなたの場合、次のようなロジックを読み取りアクセス モジュールに追加するだけです。

IF my_user-ze_design IS INITIAL.
  my_user-ze_design = co_ze_default_design.
ENDIF.
于 2013-04-26T16:43:20.750 に答える
0

テーブルに追加される列のデフォルト値を定義できます。DB が Oracle 11g (またはそれ以降) の場合、Oracle は「Dictionary Only Add Column」を導入しました。これは、デフォルト値のメタデータがディクショナリにのみ格納されることを意味します。したがって、既存のレコードはデフォルト値で更新する必要があり、テーブルがどれほど大きくてもオーバーヘッドはありません。

于 2014-05-29T14:16:08.807 に答える