問題タブ [clob]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 過度に複雑な oracle jdbc BLOB 処理
jdbc シン ドライバーを使用して BLOB を Oracle データベースに挿入する方法について Web を検索すると、ほとんどの Web ページで 3 段階のアプローチが提案されています。
- 値を挿入し
empty_blob()
ます。 - で行を選択します
for update
。 - 実際の値を挿入します。
これは私にとってはうまくいきます。例を次に示します。
作成者がより単純な 1 ステップのソリューションを使用することを提案している Web ページがいくつかあります。このソリューションの前の例:
2 番目のコードははるかに簡単なので、私の質問は次のとおりです。最初の (一般的な) ソリューションのポイントは何ですか? 2 番目のソリューション (Oracle サーバーのバージョン番号、jdbc ドライバーのバージョン、BLOB のサイズなど) になんらかの制約がありますか? 最初の解決策は優れていますか (速度、メモリ消費量など)? より単純な 2 番目のアプローチを使用しない理由はありますか?
まったく同じ質問が CLOB フィールドにも当てはまります。
oracle - OracleテーブルにLOBを追加することの何が問題になっていますか?
(Oracle 10で)新しいCLOB列を追加してテーブルを変更しようとしていますが、失敗します。ORA-01735エラーが発生します。問題は、グーグルで検索しても特に何が悪いのかわからないので、念のためここで聞いてみようと思いました。
とにかく私のクエリは:
そして、次のエラーが発生します。
何か案は?
ありがとう。
java - HibernateでCLOBを怠惰にロードする
このグーグルについて少し見つけることができるものはたくさんありますが、私はこの問題の実行可能な解決策を完全には見つけていません。
基本的に、私が持っているのは、オンデマンドでロードしたい特定のクラスの大きなCLOBです。これを行うための素朴な方法は次のとおりです。
ただし、これは機能しません。これは、Oracleドライバーを使用しているためと思われます。つまり、Lobオブジェクトは単純なハンドルとして扱われず、常に読み込まれます。またはそう私は私の進出から信じるように導かれました。レイジープロパティの読み込みに特別なインストルメンテーションを使用するソリューションが1つありますが、Hibernateのドキュメントでは、それを正しく機能させることにあまり関心がないように思われるため、そのルートには行きたくありません。特に、追加のコンパイルパスなどを実行する必要があります。
したがって、私が想像した次の解決策は、このオブジェクトを別のタイプに分離し、関連付けを定義することでした。残念ながら、ドキュメントには矛盾する情報が記載されていますが、共有主キーを使用したOneToOneアソシエーションでは遅延読み込みが機能しないことは明らかです。アソシエーションの片側をManyToOneとして設定しましたが、共有主キーがある場合にこれを行う方法がよくわかりません。
それで、誰かがこれについて行くための最良の方法を提案できますか?
sql - Oracle SQL Developerを使用してCLOBをテキスト・ファイルにエクスポートする
Oracle SQL Developer を使用しており、テーブルを CSV ファイルにエクスポートしようとしています。一部のフィールドは CLOB フィールドであり、多くの場合、エクスポート時にエントリが切り捨てられます。私の最終目標はここでOracleを使用しないことであるため、すべてを取得する方法を探しています(Oracleダンプを受け取りました-これはOracle dbにロードされましたが、データを別の形式で使用しているため、経由します仲介者としてのCSV)。
これに複数の解決策がある場合、それが私にとって1回限りの手順であることを考えると、より複雑な「正しく行う」解決策に対するよりハック的なタイプの解決策は気にしません。
java - Hibernateを使用した4000を超える文字列からCLOBへの変換
文字列(> 4k)をデータベーステーブルのCLOBフィールドに永続化するJavaクラスがあります。文字列が4k未満の場合は、機能します。
@Lobを使用してフィールドに注釈を付けましたが、最初はストリームでバッチ処理がサポートされていないために例外が発生していたため、例外を与えるHibernate構成でバッチサイズを0にしました。
原因:java.sql.SQLException:ORA-01460:実装されていない、または不合理な変換が要求されました
この問題は、Grailsのコードを使用した場合にのみ発生します。純粋なJavaアプリケーションから同じコードを使用すると、問題は発生しません。両方のアプリケーションの休止状態の構成は同じです(Grailsでバッチサイズを0に設定する必要がある場合を除く)。問題は、Hibernateバージョンの違いです。これは私が見る限りGrailsでは3.2.6gaであり、Javaアプリケーションでは3.2.5gaです。Oracleドライバはどちらの場合も同じです。
どんな答えでも歓迎します。
java - DBCP接続を使用してCLOBを更新できません
ApacheDBCP接続プーリングを使用して取得された接続オブジェクトを使用してCLOB列を更新しようとしています。
以前、これを使用して接続プールを実装しましたが、正常に機能していました。つまり、CLOBを更新できます。java.sql.SQLExceptionが発生したため、DBCPに切り替えました。ORA -01000:開いているカーソルの最大数を超えました。すべてのDAOの接続、resultSet、preparedStatementオブジェクトを確認しました。すべてのfinallyブロックでは、これらのカーソルが閉じられています。まだこのエラーに直面しているため、DBCPに切り替えることにしました。
しかし、このDBCP接続を使用してCLOBを更新しようとすると、アプリケーションはpstmt.executeUpdate()でハングします。
getCLOB()メソッドは次のとおりです。
私も((DelegatingConnection) conn).getInnermostDelegate()
接続を渡してみましたが、無駄です。
また、ここでシャイニーが提案したことを試してみました。今回はデータを選択しているときにぶら下がっています。
Oracle 9iを使用していて、JDBC Oracle Driverのバージョンが10を超えています(申し訳ありませんが、現在正確なバージョンを思い出せませんでした)。
oracle - SQL ローダーを使用して LOB を Oracle にインポートできませんでした
ID と nvarchar(max) として格納された非常に長い XML 文字列で構成されるテーブルを SQL Server から Oracle にエクスポートしようとしています。
SQL Table -- CREATE TABLE MyStuff (MyID int, MyText nvarchar(max))
Oracle Table -- CREATE TABLE MyStuffImported (MyID int, MyText NCLOB)
SQL Server bcp ユーティリティを使用してテキスト ファイル (MyStuff.bcp) にエクスポートし、SQL Loader 経由で Oracle にインポートしています。しかし、SQL ローダーは次のメッセージで失敗します。「データ ファイル (MyStuff.bcp) の物理レコードが最大値 (1048576) を超えています」と 0 レコードがインポートされます。
正確な問題が何であるかはわかりません。最も明らかな可能性は、MyText が最大長の 1048576 よりも長いことです。実際、一部のレコードは長くなっていますが、すべてではありません。少なくとも一部のレコードがインポートされなかったのはなぜですか? そして、この制限を回避する方法はありますか?
もう 1 つの可能性は、いくつかのディスカッション ボードで読んだことですが、MyText に Oracle が処理できない改行があるというものです。(1) SQL からのエクスポート中に \r と \n を削除し、(2) SQL ローダー制御ファイルのレコード区切り文字で \n を使用することで、この問題を回避していることを願っていました (完全なファイルについては以下を参照)。 . 私は何か間違ったことをしていますか、それともすべてのケースを処理していませんか?
以下は、私の SQL ローダー制御ファイルのテキストです。区切り文字として \ を使用していることに注意してください。これは奇妙に思えますが、MyText フィールドで使用されていない唯一の文字です。\\
したがって、エスケープしているので、\ の意味 がわかります。
助言がありますか?おそらく、SQL Loader を介して NCLOB にインポートするより良い方法はありますか?