これは簡単だと思っていましたが、私はこれを頭に置くことができません。私はpl/sqlを避けたい、できればこれをプレーンなSQLで行うことが望ましい。だから以下のSQLでは、私はagreement_tblに挿入しようとしている、別のテーブルemployee_agreementから選択しています。従業員同意表は約6000行を返します。したがって、各行の挿入には、AGREEMENT_NBR列に挿入された一意のmax(agreement_nbr)+ 1が必要です。オラクルは同じテーブルにselect max + 1を挿入します
問題は、sqlが最初に実行されるため、max(agreement_nbr)は常に5000と同じですが、max(agreement_nbr)を挿入しようとすると値5000を挿入しようとすると 'Unique constraint exception'すべての6000個のインサートについて。選択クエリから各行に対してユニークなmax + 1を取得するにはどうすればよいですか?これはおそらく、同じテーブルからの挿入と選択に似ています。どんな助けもありがとうございます。ありがとう
編集:これは1回限りのスクリプトで、agreement_tblには既に何千ものレコードが設定されています。
INSERT
INTO
Agreement_tbl
(
AGREEMENT_NBR,
Employee_id,
AGREEMENT_TEXT
)
select
(select max(AGREEMENT_NBR)+1 from Agreement_tbl) as AGREEMENT_NBR,
a.Employee_id ,
a.AGREEMENT_TEXT
from employee_agreement
-- some where conditions
ですか? –
'SEQUENCE'を使用してください。あなたの 'max(AGREEMENT_NBR)+ 1'の解決策は、一度に複数のユーザに対しては機能しません。 –
これを行うために、シーケンスがはるかに優れており、より信頼性の高い方法です。これにより、将来の挿入のためにテーブルの現在の順序が維持されます。それ以外にも、元のアプローチを継続したい場合は...「Agreement_tbl」は現在空ですが、このメソッドを使用して値を入力しようとしていますか?これがこの表を埋めるための1回のDMLの場合、これは順序がソリューションに値を追加しない可能性があります。 – gmiley