1

DB2 テーブルにデータをロードするためのロード ユーティリティを用意したいと考えていました。テーブルには、GENERATEDALWAYS 機能セットを含む列があります。

そのため、アンロードされた詳細をテーブルからロードできません。

GENERATEDALWAYS が設定された列を持つテーブルにインポートを使用することは可能ですか?

私がした手順:

1. db2 "export to tbl.txt of del modified by coldel| select * from <schema.table> where col=value"
2. db2 "delete from <schema.table> where col=value"
3. db2 "import from tbl.txt of del modified by coldel| allow write access warningcount1 insert into <schema.table>"

「GENERATEDALWAYS」の列には、インポート後に新しい値が含まれています。インポートを使用して GENERATEDALWAYS 列に古い値を設定することはできますか?

支援に感謝します。

ありがとう、マシュー・リジュ

4

3 に答える 3

0

おそらく、列から「世代」を削除し、適切な値で再度インポートした後に追加することができます。

于 2013-03-05T14:57:51.123 に答える
0

あなたが求めていることは不可能です。をIMPORT持つ列をオーバーライドすることはできませんGENERATED ALWAYS。@Peter Miehleが示唆しているように、テーブルを変更して列がGENERATED BY DEFAULTであることを指定できますが、これにより他のアプリケーションが壊れる可能性があります。

質問のタイトルは、ユーティリティを使用したくないことを意味しますLOAD(ただし、実際の質問ではそれについて何も言及していません)。ただし、LOADデータをテーブルに書き込み、生成された列の値をファイルに存在するように維持する唯一の方法は次のとおりです。

db2 "load from tbl.txt of del modified by generatedoverride insert into schema.table"

これを行う場合は、次のことに注意してください。

  • DB2 は、テーブル内の既存の行と競合があるかどうかをチェックしません。これを解決するには、問題の列に一意のインデックスを定義する必要があります。DELETEこれにより、ロードのフェーズでロードしたばかりの行が DB2 によって削除されます。

  • 生成された列が を使用IDENTITYしている場合は、列を変更して、今後生成される値がテーブルに挿入したばかりの行と競合しないようにしてください。

于 2013-03-05T18:49:08.800 に答える
0

@Ian Bjorhovde がオプションを提供してくれました。

IMPORT は、実際にはバックグラウンドで INSERT を実行します。つまり、最初にパラメーター マーカーを含む INSERT ステートメントを準備し、入力ファイルの値をそれらのマーカーに使用します。

SQL スナップショットには、使用されている INSERT ステートメントが表示されます。

INSERT ステートメントで不可能なことは、IMPORT では不可能です (一種の .. )

于 2013-03-05T18:58:35.190 に答える