2

Id 列と言う列の 1 つでシーケンスが設定されている Oracle のテーブルにデータを挿入しています。そのようなテーブルにデータをロードする方法を知りたいです。

以下のリンクをたどった -

スクリプト コンポーネントで OleDbConnections を使用することは可能ですか?

Oracleテーブルから.nextvalを取得する関数を作成しようとしましたが、次のエラーが発生しています-

エラー ORA-01019 のテキスト取得中にエラーが発生しました

パッケージを介して値を手動で設定する、つまりスクリプトタスクを使用して値を列挙するが、シーケンスをインクリメントしていないことが問題の原因であることに気付きました。どのように対処しますか?それを解決するのに役立つリンクはありますか?

私は SSIS-2014 を使用していますが、評判ポイントが不足しているためタグ付けできません。

4

2 に答える 2

1

この問題に対応するための回避策を作成しました。シーケンス ID を取得する列のない宛先のステージング テーブルを作成しました。データが挿入されたら、SQL ステートメントを呼び出してステージング テーブルからメイン テーブルにデータを取得し、.nextval 関数を使用します。最後に、必要に応じてテーブルを切り捨て/削除します。この回避策ではなく、スクリプトを介してこれと同じことをどのように処理できるかを知ることは、依然として興味深いでしょう。

たとえば、以下のようなもの -

insert into table_main
select table_main_sequence_name.nextval
,*
from (
select *
from table_stg
)
于 2016-11-06T22:29:56.570 に答える
0

ORA-01019複数の Oracle クライアントがインストールされているという事実に関連している可能性があります。ORACLE_HOMEクライアントが 1 つしか含まれていない場合は、変数を確認してください。

私が考えている 1 つの回避策は、シーケンスを処理するための 2 つの手順を作成することです。最初に値を取得するもの:

create or replace function get_first from seq as return number
seqid number;
begin
select seq_name.nexval into seqid from dual;
return seqid;
end;
/

次に、スクリプトでインクリメントを行います。その後、2 番目のプロシージャを呼び出してシーケンスをインクリメントします。

create or replace procedure setseq(val number) as
begin 
execute immediate 'ALTER SEQUENCE seq_name INCREMENT BY ' || val;
end;
/

これは良いアプローチではありませんが、問題を解決するかもしれません

于 2016-11-06T16:57:59.567 に答える