1

Toad を使用して Excel スプレッドシートを Oracle にインポートしようとしています。問題は、インポート先のテーブルに主キー フィールドがあり、通常のストアド プロシージャ挿入に "sequence".nextval を使用して入力することです。

Toad インポート ウィザードを使用して、'table_seq.nextval' を式として入力しようとしましたが、最後にウィザードを実行すると、次のエラーが表示されます: タイプ (UnicodeString) のバリアントをタイプ (Double) に変換できませんでした。

では、Toad インポート ウィザードで sequence.nextval を使用して Excel データをインポートすることは可能ですか、それとももっと良い方法がありますか?

また、現在テーブルにあるものを超えてシードを開始することにより、Excel にキーを生成させることも考えました。しかし、Oracle を初めて使用するので、テーブルに設定したシーケンスが台無しになるのでしょうか? たとえば、挿入前に次に使用可能な ID が 500 で、Excel からの挿入で 500 から 5000 までの行が挿入された場合、そのテーブルのシーケンスのストアド プロシージャの次の実行では 500 を使用しようとするでしょうか?

前もって感謝します!

4

1 に答える 1

4

はい、シーケンスは 50 のままで、primary key violatedストアド プロシージャを使用すると例外が発生します。

これは、シーケンスがテーブルにリンクされていないためです。また、リンクできません。それらは分離されたオブジェクトです。

on insert for each row私が見る最善の方法は、id を に設定するトリガーを使用することnextvalです。

コード例:

CREATE OR REPLACE TRIGGER trg_table_name_set_id
  BEFORE INSERT 
  ON table_name
  FOR EACH ROW
BEGIN

  SELECT table_seq.nextval INTO :new.id FROM DUAL; --id would be the id column in your table

--or, if you are on 11g, simply
--:new.id := table_seq.nextval;

END trg_table_name_set_id;
于 2012-12-12T14:05:17.220 に答える