2017-01-17 17 views
0

私は、E_idというPKカラムを持つテーブルをロードしようとしています。私は行がこのテーブルにインフォーマティアレベルでロードされるたびに、この列の一意のIDを生成したいと思う。しかし、私はこのe_id列がテーブルレベルで一意の値を生成します。テーブル作成スクリプト自体でこの列にクエリを書くことでこれを達成できますか? 現在、私は時々私は2つのレコードに対して同じ値を取得していますが、このoracleテーブル内のカラムの一意のシーケンス

e_id NUMBER DEFAULT TO_NUMBER(TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISSFF9')) NOT NULL 

で値をデフォルトにするこの方法を試してみました。 誰かがこれについてどうやって行くのを助けることができますか?

TIA。

+0

なぜ単に自動インクリメント列を使用しないのですか? –

答えて

1

1を参照することができ

2に値を移入します挿入行トリガーの前にpk列

create sequence GSEQUENCE 
minvalue 1000 
maxvalue 99999999999999999 
start with 93581 
increment by 1 
cache 20; 


CREATE OR REPLACE TRIGGER BI_DOCUMENTS 
    BEFORE INSERT 
    on DOCUMENTS 

    for each row 
declare numrows INTEGER; 
begin 


select gsequence.nextval 
into :new.id_DOCUMENT 
from dual; 

end; 
/
+0

ありがとうございました。これは助けになった! – gbppa

1

12cを使用している場合は、最も簡単な方法はIDENTITY列を使用することです。 Oracleは、レコードを挿入するたびに列の一意の値を自動的に生成します。

以前のバージョンでは、シーケンスを定義してトリガーで生成することも、挿入ステートメントで直接参照することもできます。

あなたはInformaticaに言及しています。私はそれを使用して以来、長い時間が、私もInformaticaを使用して一意のIDを生成する簡単な方法があることを覚えているようです。

+0

ええ、しかしここでの制約は、私はこの列のために一意の値を読み込むためにinformaticaを使うことができません。それは私のここの制約だ。テーブルのスクリプトレベルでこの列を設定する方法を見つける必要があります。 – gbppa

+0

純粋にテーブルスクリプトレベルでなければならない場合は、12cにする必要があります。それ以外の場合は、トリガーが行く方法のように聞こえます。 – BriteSponge

0

すべての練習目的に固有のグローバルユニークID(GUID)を使用できます。システムの多くは、一意のIDを生成するためにGUIDを使用します。 here

select sys_guid() from dual 

モテGUIDが真にランダムな固有のIDを与えている間あなたはシーケンシャル一意の値が必要な場合、あなたは常にOracleのシーケンスを使用することができます。

Oracleには「自動インクリメント」列はありませんが、同様の結果をトリガーで受け取ることができます。

EDIT:あなたはシーケンスを作成するシーケンス

1を使用しているこのリンクこれを行うための最も一般的な方法のあまりにHow to generate a GUID in Oracle?

関連する問題