2016-04-13 12 views
0

私はOracleにSQL Serverベースのアプリケーションを移植しています。私たちのOracle DBAは私に、オリジナルのSQL Serverスキーマ(とそれから生成されたもの)と同一であると考えられていたスキーマを私に与えましたが、自動生成キーはありません。私はこれらのテーブルPKを通常のINTからインクリメントに変更しようとしています。私は、Oracle SQL Developer 4.0.3とOracle 12cを使用しています。Oracleの既存のPKに自動生成されたキーを追加します。

私が受け取るエラーはORA-01442: column to be modified to NOT NULL is already NOT NULL です。テーブルを編集して列を選択し、[ID]ドロップダウンを[IDとして生成]に設定すると、これが表示されます。私は、SQl Developerが、まだPKであるときにそれがnullでないようにしようとしている理由がわかりません。

私の質問は次のとおりです。生成されたキーを設定する適切な方法ですか?どうすればこの問題を回避できますか?必要な列をすべて変更したら、DBAはスキーマを使用して最初に作成したキーを適切に生成するために使用したプロシージャを再生成して、良いスキーマを作成するためのよりよいソリューションを提供できますか?

ありがとうございました。

答えて

3

カラムがNOT NULLとしてすでに定義されている場合は、NOT NULLとして再定義する必要はありません。したがって、ora-01442エラーが発生します。

ようなSQL Serverの同一性の配列値を得るための最良の方法は、行を挿入する前に、既定の配列と列を定義である:

CREATE SEQUENCE SEQ_NAME 
START WITH  1 
INCREMENT BY 1 
NOCACHE 
NOCYCLE; 

ALTER TABLE table_name MODIFY column_name INT DEFAULT SEQ_NAME.NEXTVAL; 

はPD:このデフォルトは12 Cで動作します。 11g以下にするには、トリガーを作成する必要があります

関連する問題