問題タブ [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.
oracle - Hibernate + Oracle + Clob:属性のコンテンツが切り替えられます
以前にこのエラーについて聞いたことがある人はいますか?
Hibernate3.3.2を使用してOracleDatabase10gにアクセスするJava5アプリケーションがあります。JDBCドライバーはOracleライトドライバーバージョン10.2.0.4.0(最新バージョンだと思います)です。データベースアクセスは、SpringのAOPツールを介して管理されるトランザクション中に発生します。1つのJavaエンティティにマップされるデータベーステーブルが1つあり、マッピングはアノテーションを介して行われます。このエンティティには、データベースのCLOBである2つの属性があります。これらはJPAに従って「Lob」で注釈が付けられ、Java文字列です。両方の属性に4000文字を超える値がない限り、すべてが正常に機能します。コミット後、データベースで値が切り替えられます。つまり、属性Aには属性Bの値が含まれ、その逆も同様です。
これは冗談ではありません!
Eclipseデバッガーは、トランザクションが終了するまでJavaエンティティーが正しい値を持っていることを教えてくれます(私はSpringトランザクション処理をデバッグしませんでした)。このエラーは、両方のClobがHibernateアノテーション'Type(type = "clob")'でアノテーションされている場合は発生しません(この場合、もちろん、Stringではなくjava.sql.Clobタイプである必要があります)。
java - JDBC: Clob を文字列に変換しても \n 改行が表示されない
安っぽい jdbc ドライバーを使用して 4D (4 次元ブランド) データベースに接続しています。
データベースに CLOB があり、getString または getClob を使用してそれを取得すると、改行が返されず、すべてが 1 行で表示されます。
しかし、NetBeans データベース エクスプローラーで選択を行い、値をコピーしてエディターに貼り付けると、\n が検出されます。
\n\ の代わりに文字 13 を取得していることに気付きました
これらの\n改行が本来のように来ない理由を知っている人はいますか?
Windows7 64ビットを使用しています
パブロ
database - Oracle NCLOB の問題
私は次の機能を持っています:
このように呼び出すと:
次のエラーが表示されます。
ORA-22835: CLOBからCHARまたはBLOBからRAWへの変換にはバッファが小さすぎます(実際: 6058、最大: 2000)
22835.00000 - "CLOBからCHARまたはBLOBからRAWへの変換にはバッファが小さすぎます(実際: %s、最大: %s)"
*原因: CLOB を CHAR または BLOB を RAW に変換しようとしましたが
、LOB サイズが CHAR および RAW
型のバッファ制限を超えていました。
列に対して文字長セマンティクスが有効な場合、幅は文字単位でレポートされます。それ以外の場合、幅はバイト単位でレポートされます。
*処置: 次のいずれかを
実行してください。 1. 変換を実行する前にLOBを小さくしてください。
たとえば、CLOBでSUBSTRを使用します。
2. DBMS_LOB.SUBSTR を使用して、CLOB を CHAR に、または BLOB を RAW に変換します。
問題は、タイプ NCLOB の posts テーブルのテキストのサイズが 6059 バイトであることです。関数を呼び出さずにこれを行うと、うまく動作するので奇妙です。つまり、次のスクリプトを実行すると:
問題なく動作します。
ありがとうございました。
oracle - 異なる文字セットを使用したdblink上のOracleclob
シナリオは次のとおりです。
Oracle A:文字セットWE8ISO8859P1
Oracle B:文字セットWE8MSWIN1252
Oracle A <-dblink-> Oracle B
Oracle Bに直接アクセスできません、ファイアウォールの問題:(
OracleBからいくつかのバイナリファイルを取得する必要があり、これらのファイルはCLOB型の列にあります(理由を聞かないでください。BLOBに変更できません)。
「selectinsert」を使用してファイルをBからAに取得し、ここにあるclob_to_blob関数を使用してファイルをバイナリに変換しています。
破損したファイルがいくつかありますが、これはOracleがdblinkを介してWE8MSWIN1252をWE8ISO8859P1に自動的に変換しているためだと思います(列はCLOBなので、テキストですよね?)。
データベースの文字セットを変更することはできません。
これに対する回避策はありますか?
前もって感謝します
c# - "ORA-01036: 不正な変数名/番号\n" C# の oracle clob の
C# で入力と出力を使用して oracle ストアド プロシージャ コールを作成しようとするとclob
、次のエラーが発生します。
コード自体は次のとおりです。
db2 - clob 値を取得するための DB2 クエリ
DB2 では、clob データ型列から値を取得するためのクエリをどのように作成するのですか?
c# - 大きな CLOB を使用して C# からストアド プロシージャを呼び出す際の問題
これらの問題を抱えたのは私が初めてではなく、以下にいくつかの参考記事をリストしますが、まだ適切な解決策を探しています.
C# Web サービスからストアド プロシージャ (Oracle 10g データベース) を呼び出す必要があります。Web サーバーには Oracle 9i クライアントがインストールされており、Microsoft を使用していますSystem.Data.OracleClient
。
このプロシージャは、XML を CLOB として受け取ります。XML が 4000 バイトを超えたとき(これは通常の使用例です)、次のエラーに遭遇しました。
ORA-01460 - 実装されていない、または不当な変換が要求されました
さらに、ストアド プロシージャを C# から直接呼び出すのではなく、匿名の PL/SQL コードを定義する有望な回避策を見つけました。このコードは OracleCommand として実行されます。XML は文字列リテラルとして埋め込まれ、プロシージャ コールはそのコード内から実行されます。
残念ながら、このアプローチは、XML が 32 KB 程度を超えるとすぐに失敗するようになりました。今回のエラーは、次の PL/SQL コンパイラに起因します。
ORA-06550: 行1、列87: PLS-00172: 文字列リテラルが長すぎます
いくつかの調査の後、2番目のアプローチで問題を解決することは不可能であると結論付けました。
上記の投稿に続いて、次の2つのオプションがあります。
- ODP.NET に切り替えます(Microsoft の廃止された DB クライアントのバグであると想定されているため)
- CLOB をテーブルに挿入し、ストアド プロシージャをそこから読み取るようにします。
(最初の投稿では、一部のクライアントにはバグがあると記載されていましたが、私の (9i) は前述の 10g/11g バージョンの範囲には含まれていません。)
これらの 2 つのオプションしか残っていないことを確認できますか? または、私を助ける別の方法はありますか?
明確にするために: XMLは最終的にどのテーブルにも保存されませんが、XML の内容に基づいていくつかのテーブルにいくつかのレコードを挿入するストアド プロシージャによって処理されます。
2つのオプションに関する私の考慮事項:
- ODP.NET への切り替えは困難です。これまでのところ、システムにアクセスできない Web サーバーに ODP.NET をインストールする必要があり、クライアントにもコードをデプロイする必要があるためです。デプロイメントの一部として ODP.NET をインストールします。
- テーブルを迂回すると、クライアント コードがかなり複雑になり、PL/SQL ルーチンを適応/拡張するデータベースにかなりの労力がかかります。
database - Oracle:LONGまたはCLOB?
これらの2つのスレッドから、
LONGは古風で、非推奨です。オラクルは言う、
LONG列のテーブルを作成しないでください。代わりにLOB列(CLOB、NCLOB)を使用してください。LONG列は、下位互換性のためにのみサポートされています。
また、既存のLONG列をLOB列に変換することをお勧めします。LOB列には、LONG列よりもはるかに少ない制限が適用されます。さらに、LOB機能はすべてのリリースで拡張されていますが、LONG機能はいくつかのリリースで静的です。
ただし、ここに記載されている回避策がないと、リモートデータベースからCLOBを読み取ることはできません。
テーブルにテキストを保存するのにどちらを優先する必要がありますか?または、これら2つよりも優れた解決策はありますか?
sql - Oracleの既存の行LOB列にファイルを読み込む方法は?
あるデータベースから別のデータベースにデータを移行する必要があります。準備として、CLOBデータとBLOBデータをOracleサーバー上にある別々のファイルに抽出しました。データベースには、これらすべての行に対してNULL値で初期化された異なるテーブル内のいくつかのCLOBおよびBLOB列が含まれています。
ファイルのコンテンツを既存の行のCLOBまたはBLOB列にロードするにはどうすればよいですか。プライマリIDキーとファイル名の正確な3つは知っていますが、これらのファイルをテーブルに読み込むための実用的な方法は見つかりませんでした。
たとえば、 SQLローダーは行を追加するか、テーブル全体を置き換えることしかできないようです。しかし、私は単一の列だけを更新したいと思います。必要に応じてSQLローダーを使用することも、プレーンなPL/SQLスクリプトを使用することもできます。
ご協力ありがとうございます。
sql - Microsoft SQL サーバーの EMPTY_CLOB()
OracleにはCLOB
型と関数がありますEMPTY_CLOB().
SQL サーバーで使用するための代替手段を探しています。
前もって感謝します。