2016-10-27 23 views
0

CLOBを別のデータベースにコピーしようとしています。しかし、私はThe Locator is invalid because it has been changedエラーが発生します。Teradata CLOBとJDBC:ロケータが変更されたため無効です。ERROR

ResultSet,PreparedStamenentが閉じられているため、このarticleにこのようなことが起こる可能性があります。しかし、すべての私のオブジェクトは開いています。そして、私はexecuteBatch()

Statement select = connectionDB1.createStatement(); 
ResultSet rs = select.executeQuery("SELECT TOP 1 myClob FROM myTab"); 
rs.next(); 
PreparedStatement ps = connectionDB2.prepareStatement("INSERT INTO myTab2 SELECT ? "); 
ps.setClob(1, rs.getClob(1)); 
System.out.println("CLOB inserted"); 
ps.addBatch(); 
ps.executeBatch(); // ERROR is thrown here before I close any objects WHY? 
        // java.sql.BatchUpdateException 

しようとするとエラーがスローされますこれはなぜ起こるのでしょうか?これを防ぐ方法は?


PS:上記のコードは他のデータ型とうまく動作します:VARCHAR、DECIMAL

答えて

1

記事は、CLOBは、同じセッションで有効であるロケータであることを述べています。

しかし、別の接続に適用しようとすると、セッションで別のセッションで使用しているため、エラーが発生します。

実行する必要があるのは、ソース・データベースから実際のCLOBコンテンツを読み取り、それをターゲット・データベースに書き込むことです。

+0

ありがとうございます。 「実際のCLOBコンテンツを読む」とはどういう意味ですか?元のCLOBをローカル・ファイルに書き込んだ後、そのファイルから読み込んでターゲット・データベースにロードすることはできますか? – john

+0

これは、あなたが非常に大きなテキストを話していることを既に知っていて、ロードのためにいくつかのTeradataツールを使うことができるなら、最良の選択肢かもしれません。 Jdbcに残しておきたいのであれば、ソースCLOBからcharacterStreamを取得して、それをターゲットCLOBの入力として設定できると思います。 – Insac

+0

これらのTeradata jdbcサンプル(http://developer.teradata.com/doc/connectivity/jdbc/reference/current/samplePrograms.html)で、Lob管理の良い例がいくつか見つかります。 – Insac

関連する問題